2015-02-10 124 views
0

我一直在编写一个程序,需要输入一个介于1和4之间的数字。为了防止输入范围之外的数字。但是变量不断传递给另一段代码并导致程序失败。 这是do while循环:如何在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) 

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

+0

首先,您允许quarterNum为0或5,即使您说您希望它为1-4,其次,如果用户输入数字以外的任何内容,您的do-while循环将变为无限循环。查看关于Scanner和nextInt的前几个问题几乎无限的原因。另外,'quarterNum'和'quarter'之间的关系是什么? – 2015-02-10 21:58:06

+0

for循环在哪里使用?季度是什么? – Kode 2015-02-10 22:00:40

+0

该计划是计算一个财政季度的总和。 quarterNum是我试图试图阻止变量传递的一个新变量(unsuccsessfull,将编辑代码)。只要输入不是1-4,我会如何设置它继续? – 2015-02-10 22:10:12

回答

1

我在代码中看到一件事:

“do/while”条件似乎是错误的。如果你的意图是,我的理解,不断地问用户,直到他/她通知1和4之间的有效季度,情况应该是这样的

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

如果我假设季度接收quarterNum的价值一些代码介于两者之间,第二部分似乎是正确的,并且只有在季度不是有效值时才会发生异常(准确地说是-1)。修复do/while条件将不再可能。

我没有看到限制变量作用域在什么地方可以解决您的问题。 (我甚至没有看到你的意思是“防止变量传递,直到循环已经关闭”)。

我希望我能帮助你。

+0

谢谢你做到了!你认为季度和季度的假设是正确的。 – 2015-02-10 22:24:58