java - 将脚本从 python 翻译为 java 时出现问题

标签 java python

我有一个脚本,首先用 python 编写,然后用 java 编写。使用给定的参数 100,50,9,3,python 脚本生成 1630。出于某种原因,java 版本生成 -22。为什么是这样? java代码有逻辑错误吗?

Python:

def calcPopulation(E,P,R,Y):
    if E > 1000 or P > 100 or R > 50 or Y > 10:
        print("One or more values that you entered is too high")
        return None
    elif Y == 1:
        return E*2

    males = E
    females = E
    #^For first year
    for i in range(Y-1): #males
        males -= int((P*males)/100)

    for i in range(Y-1):
        females += int(-(P*females)/100)
        for i in range(int(females)):
##            femalebaby = (R/2)
##            malebaby = (R/2)
            females+= (R/2)
            males+= (R/2)
    return int(males+females)



def main():
    print(calcPopulation(100,50,9,3))
    #Result is 1630


if __name__=="__main__":
    main()

Java:

import java.util.*;

public class rabbit{

    public static int calcPopulation(int E,int P,int R,int Y){
        if (E>1000||P>100||R>50||Y>10){
            System.out.print("One or more of the values you entered is too high");
            return 0;
        }
        else if (Y==1){
            return E*2;
        }
        int males=0;
        int females=0;
        males += (int) E;
        females += (int) E;
        for(int i=0;i<(Y-1);i++){
            males -= (int) (P*males)/100;
        }
        for(int i=0;i<(Y-1);i++){
            females -= (P*females)/100;
            for(int x=0;x<females;x++){
                females += (R/2);
                males += (R/2);
            }
        }
        return (int) (males+females);
    }

    public static void main(String[] args){
        System.out.println(calcPopulation(100,50,9,3));
        //Result produces -22
    }


}

我最好的猜测是java代码中的for循环的运行方式与python的不同?我不确定,因为我只是一个java菜鸟。底线是我需要 java 脚本来产生与 python 脚本相同的结果。如有任何帮助,我们将不胜感激。

最佳答案

在 Python 中,当您将一个整数除以一个整数(如 5/2)时,您将得到 2.5。但在 Java 中,你得到 2,因为 Java 将这种除法视为整数除法。在Python中,您可以使用//进行整数除法。

所以像这样的行:

males -= int((P*males)/100)

在 Java 中会产生不同的结果。要在 Java 中正确编写此代码,您需要将其中一个操作数设为 double,如下所示:

males -= (int)((P*males)/100.0); // 100.0 is double, 100 is int.

更改所有包含整数除以整数的行。

关于java - 将脚本从 python 翻译为 java 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49832974/

相关文章:

java - 博客中的这句话说函数必须在方法签名处声明 Throwable 才能捕获它,这句话是什么意思?

java - 加密与反编译

java - LMAX干扰者: How to control the speed of producers?

java - 正则表达式到 Java.regex.Pattern

python - Python中重复列表中的数据处理

python - 使用Python操作Excel电子表格

Python MySQL mysql.connector 使用column_names属性构建返回

Python - 规避 argparse nargs 错误

python - 无法在 Scrapy 中定义自定义下载器中间件

java - 将图像保存到外部存储(如果可用)