1

I have a script, first written in python, then in java. With the given arguments, 100,50,9,3, the python script yields 1630. For some reason, the java version yields -22. Why is this? Is there a logic error in the java code?

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
 }
}

My best guess is that the for loops in the java code are operating differently than the python ones? I'm not sure, since i'm just a noob in java. Bottom line is I need the java script to produce the same result as the python script. Any help is appreciated.

asked Apr 14, 2018 at 15:17
0

1 Answer 1

2

In python, when you divide an integer by an integer like 5 / 2, you get 2.5. But in Java, you get 2 because Java treats this kind of division as integer division. In python, you can use // to do integer division.

So lines such as this:

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

will yield a different result in Java. To write this correctly in Java, you need to make one of the operands a double, like this:

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

Change all the lines where you have an integer dividing by an integer.

answered Apr 14, 2018 at 15:24
Sign up to request clarification or add additional context in comments.

2 Comments

I'm running the java code on an online IED. When I change females += (R/2); to females += (R/2.0); the whole thing freezes.
@PeterFilip try another IDE, ideally one that's on your machine.

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.