Java程序不像python程序那样工作,我不知道为什么
我目前正在学习java,我对Python非常了解,但我似乎无法使我的java问题以与Python程序相同的方式工作。下面是python程序:Java程序不像python程序那样工作,我不知道为什么,java,python,Java,Python,我目前正在学习java,我对Python非常了解,但我似乎无法使我的java问题以与Python程序相同的方式工作。下面是python程序: import random as rand successes = 0 for x in range (1000): stake = 100 bets = 0 while stake >0 and stake <200: play = rand.randint(0,1) bets +=1
import random as rand
successes = 0
for x in range (1000):
stake = 100
bets = 0
while stake >0 and stake <200:
play = rand.randint(0,1)
bets +=1
if play == 0:
stake = stake -1
else:
stake = stake + 1
if stake == 200:
successes +=1
print ('stake = ', stake, 'bets made =', bets)
print (successes/1000)
print(bets/1000)
下面是我为java程序所做的,我被告知使用Math.random和Math.Round,我想这可能就是我遇到的问题,我不知道把Math.Round放在哪里
public class Gambler {
public static void main(String[] args){
double successes = 0;
for (int i = 0; i <1000;i++){
double stake = 100;
double bets = 0;
while(stake>0 && stake <200){
bets++;
if (Math.random()<0.5) stake ++;
else stake --;
if (stake==200) successes++;
System.out.println("stake = "+ stake + " bets made = " + bets);
}
System.out.println("average successes = " + successes/1000);
System.out.println("average bets = " + bets/1000);
}
}
}
在python中,如果stack==200:在while循环之外,在java中它在内部,同样地,当java中的输出在python中位于for循环之外时,它们也在for循环之内。我相信这更接近您的python代码
public class Gambler {
public static void main(String[] args){
double successes = 0;
double bets = 0;
for (int i = 0; i <1000;i++){
double stake = 100;
bets = 0; // initialize outside of for loop
while(stake>0 && stake <200){
bets++;
if (Math.random()<0.5) stake ++;
else stake --;
}
if (stake==200) successes++;
System.out.println("stake = "+ stake + " bets made = " + bets);
}
System.out.println("average successes = " + successes/1000);
System.out.println("average bets = " + bets/1000);
}
}
欢迎来到stack!你期望的输出是什么?两者的结果有什么不同?在python中,如果stake==200:在while循环之外,在java中,它在内部,同样,java中的输出在for循环之内,而在python中,它们在for循环之外,您基本上忘记了在程序上面运行时的}Take>0&&stack。这对你来说似乎很好。一般不鼓励只回答代码。我建议您修复格式并添加对更改内容的解释。更改内容可能不会立即变得明显,即使更改内容明确,也可能不需要。Math.random返回0(包括0)和1(排除)之间的双精度值。play==0几乎总是错误的。问题中的版本,Math.random<0.5,大约是50-50。我现在明白了,谢谢,我一直在拼命想弄清楚,但是你知道为什么我使用这个行系统。out.printlneaverage bets=+bets/1000;不再有效了?我有点明白,但我不太知道如何修复它,因为它是在for循环内部初始化的,而您正试图在范围之外访问它
stake = 196.0 bets made = 10290.0
stake = 197.0 bets made = 10291.0
stake = 198.0 bets made = 10292.0
stake = 197.0 bets made = 10293.0
stake = 196.0 bets made = 10294.0
stake = 197.0 bets made = 10295.0
stake = 198.0 bets made = 10296.0
stake = 197.0 bets made = 10297.0
stake = 198.0 bets made = 10298.0
stake = 197.0 bets made = 10299.0
stake = 196.0 bets made = 10300.0
stake = 195.0 bets made = 10301.0
stake = 196.0 bets made = 10302.0
stake = 197.0 bets made = 10303.0
stake = 196.0 bets made = 10304.0
stake = 197.0 bets made = 10305.0
stake = 196.0 bets made = 10306.0
stake = 197.0 bets made = 10307.0
stake = 198.0 bets made = 10308.0
stake = 199.0 bets made = 10309.0
stake = 200.0 bets made = 10310.0
average successes = 0.512
average bets = 10.31
public class Gambler {
public static void main(String[] args){
double successes = 0;
for (int i = 0; i <1000;i++){
double stake = 100;
double bets = 0;
double play = Math.random();
while(stake>0 && stake <200){
bets++;
if (play == 0) stake --;
else stake ++;
}
if (stake==200) successes++;
System.out.println("stake = "+ stake + " bets made = " + bets);
}
System.out.println("average successes = " + successes/1000);
System.out.println("average bets = " + bets/1000);
}
}
public class Gambler {
public static void main(String[] args){
double successes = 0;
double bets = 0;
for (int i = 0; i <1000;i++){
double stake = 100;
bets = 0; // initialize outside of for loop
while(stake>0 && stake <200){
bets++;
if (Math.random()<0.5) stake ++;
else stake --;
}
if (stake==200) successes++;
System.out.println("stake = "+ stake + " bets made = " + bets);
}
System.out.println("average successes = " + successes/1000);
System.out.println("average bets = " + bets/1000);
}
}