Java程序不像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

我目前正在学习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
        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);
    }
}