我有一个脚本,首先用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脚本相同的结果。任何帮助表示赞赏。
答案 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.
更改整数除以整数的所有行。