【问题标题】:How to initialize a variable in a do while loop without passing the value until the loop has closed?如何在do while循环中初始化变量而不传递值直到循环关闭?
【发布时间】:2015-02-10 21:53:49
【问题描述】:

我一直在编写一个程序,需要输入 1 到 4 之间的数字。为了防止输入超出范围的数字。然而,变量不断传递给另一段代码并导致程序失败。 这是 do while 循环:

        do
    {
        System.out.println("Please enter a quarter number 1-4: ");
        quarter = scanIn.nextInt();     
    }while((quarter > 5 ) && (quarter < 0));

这是运行变量的代码:

        for (int n = ((quarter * 3)-3); n < (quarter*3); n++)
    {
        String sum = fmt.format(monthSales[n]);
        System.out.printf("Sales for month %d: %s\n", n+1, sum);
    }

这是输入错误时返回的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -6
at lab4.Lab4.main(Lab4.java:57)

我尝试将“季度”的范围限制在循环内,但随后 while 子句不起作用。如何防止变量在循环关闭之前传递? p.s.这个问题是作业的一部分,因此我必须使用 do while 循环。

【问题讨论】:

  • 首先,即使您说希望它是 1-4,您也允许 QuarterNum 为 0 或 5,其次,如果用户键入其他任何内容,您的 do-while 循环将变为无限循环比一个数字。有关原因,请参阅几乎无限数量的关于 Scanner 和 nextInt 的先前问题。还有,quarterNumquarter是什么关系?
  • for循环在哪里使用?什么是季度?
  • 程序是计算一个财政季度的总和。 QuarterNum 是我放入的一个新变量,试图阻止该变量通过(不成功,将编辑代码)。只要输入不是 1-4,我将如何设置它继续?

标签: java scope do-while


【解决方案1】:

我在您的代码中看到一件事:

“do/while”条件似乎是错误的。据我了解,如果您的意图是不断询问用户,直到他/她告知 1 到 4 之间的有效季度,则条件应该类似于

do {
  // ...
} while (quarterNum < 1 || quarterNum > 4);

如果我假设该季度在其间的某些代码中接收到了 quarterNum 的值,那么第二部分似乎是正确的,并且只有在季度不是有效值(准确地说是 -1)时才会发生异常。修复 do/while 条件将不再可能。

我看不出限制变量范围可能对您的问题有任何影响。 (我什至不明白您所说的“防止[ing]变量传递直到循环关闭”是什么意思)。

希望能帮到你。

【讨论】:

  • 谢谢你成功了!您在假设 QuarterNum 和 Quarter 相等时是正确的。