蓝色的J显示它正在运行,但不会打开结果窗口

问题描述:

我一直在运行一个程序,它模拟了通过一个7步桥接所需的步骤数。生成一个随机数来确定该人是向前还是向后。这个模拟运行1000次。在此之后,打印出的平均打印步数以及打印的最大步数。蓝色的J显示它正在运行,但不会打开结果窗口

这反过来运行1000次。它编译好。我的问题是,当我去运行它时,(在BlueJ上)条显示它正在运行,但输出窗口未能出现。发生什么事? (最有可能是愚蠢的,我不知道的东西。)

import java.util.Random; 

public class Prog214a 
{ 
    public static void main (String[] args) 
    { 
     Random rn = new Random(); 

     for (int m = 1; m <= 20; m++) 
     { 

      int max = 0;   

      for (int c = 1; c <= 1000; c++) 
      { 
       int s = 0; 
       int sn = 0; 
       int sum = 0; 

       while (s < 7) 
       { 
        int ans = rn.nextInt(1) + 0; 

        if (ans == 1) { 
         s = s + 1 
        } 
        else { 
         s = s - 1; 
        } 

        sn++;    
       } 

       sum = sum + sn; 

       if (sn > max) {    
        max = sn;   
       } 

       if (c == 1000) {    
        double avg = sum/c; 
        System.out.print(avg); 
        System.out.print(" " + max);    
       } 
      } 
     } 
    } 
} 
+1

请正确地缩进/格式化您的代码。在BlueJ中,您可以按ctrl + shift + I自动执行此操作。 – davmac

+0

's = s + 1' - 您在此陈述后错过了分号。你确定这段代码编译正确吗? –

+0

@Flightless_bird,使用和IDE很棒,你还应该学习使用IDE进行调试。 – Acewin

至少有一个问题。在这里:

   int ans = rn.nextInt(1) + 0; 

       if (ans == 1){ 
        s = s + 1; 
       } 

       else { 
        s = s -1; 
       } 

rn.nextInt(1)只能返回0,所以ans将是0。你有没有警卫,确保s不变成负,所以它 - 它仍然低于7,这意味着while循环(条件为s < 7)继续执行长时间时间(具体而言,直到s再次回到正数)。

+0

而合适的调用语句将为int ans = rn.nextInt(2);这是随机生成0或1。但是,执行可能不会在有限的迭代中停止。 – Acewin

+0

感谢所有人的帮助,我能够解决我所有的大错误。还有一件事......我的平均值一直为0。我认为这是一个继承性的东西,所以我玩弄了“c”和“avg”的定位,但是找不到解决这个问题的方法问题。有什么建议么? –

+0

@Flightless_bird你需要将'int sum = 0;'移到循环外部。因为它位于循环内部,所以每次迭代都会重置其值。 – davmac