【问题标题】:Dice-rolling program, not outputting what I need掷骰子程序,不输出我需要的东西
【发布时间】:2015-07-13 00:16:14
【问题描述】:

我正在编写一个程序来模拟两个 6 面骰子的滚动。程序将一遍又一遍地“重新掷”骰子,直到达到 7。程序会跟踪掷到 7 所需的次数。在代码结束时,程序将输出一个平均值,该平均值将由下式计算(总卷数/n)“n”是用户选择选择程序的次数。

我遇到的新问题是获得 7 的平均滚动数。我得到的平均数为 0.125,这显然没有任何意义。我需要添加一个我猜想但又不确定的新参数。

  import java.util.*;
public class HW9 {
    public static void main(String args []) {
        Scanner s = new Scanner(System.in);
        int n = -1;
        do {
            System.out.println("Enter a number greater than 1.");
            n = s.nextInt();
        }
        while(n <= 1); 
        int total = 0;
            for(int i = 0; i < n; i++) {
            int times = 0;
            int result = 0;
            while(result !=7) {
                result = (1 + ((int)(Math.random()* 6))) + (1 + ((int)(Math.random() * 6)));
                times++;
            }
            total = times;
        }
            System.out.println("Average: " + (double)total/n);
        }
    }

【问题讨论】:

  • Java 不是 JavaScript。除了那个潜在的灾难性错误之外,您还有一个while 循环,它专门告诉程序只要您输入的数字大于1,就会继续询问您,而不是在发生这种情况时停止询问您。跨度>
  • 我的错误,添加标签时没有仔细看。我应该怎么做才能解决这个问题?我需要我必须启动程序的while循环(至少我认为我这样做)。如果这看起来微不足道,请原谅我,但我的代码经验几乎为零,我只是想通过我所在的课程。
  • 不会明确告诉你,但你的代码说“当n大于1时做这个问题”。你想要“做题直到 n大于1”,或者等效地和更多Java-ish-ly,“在n仍然不 大于1"。
  • 所以我应该选择 while (n !> 1); ?
  • 这不是有效的语法。 ! 是一个取反布尔值的运算符,即truefalse(例如比较的结果);你不能否定另一个运算符。但这个想法是对的。此外,“不大于”与“小于或等于”相同。所以你有两种同样有效的方式来重写它。

标签: java loops


【解决方案1】:

您要求一个大于 1 的数字,但每次输入大于 1 的数字时,您都在重复循环。

do {
        System.out.println("Enter a number greater than 1.");
        n = s.nextInt();
    }
while(n > 1); 

while(n &gt; 1) 应该是 while(n &lt; 1) 或任何你想放在那里的东西。

【讨论】:

    【解决方案2】:

    你的问题在于你的循环条件。

    while(n > 1);
    

    当条件为真时,它会重复您的 do 块中的语句。输入大于 1 的数字意味着条件保持为真,因此它将继续要求输入,直到您输入 0 或负数为止。

    要修复它,您需要交换条件语句,如下所示: while(n &lt; 1)

    【讨论】:

      猜你喜欢
      • 2017-11-06
      • 2014-04-21
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多