我有一个脚本,首先用 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/