问题从python到java的翻译脚本

时间:2018-04-14 15:17:26

标签: 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()

爪哇:

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脚本相同的结果。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

在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.

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