Aug*_*mae 1 java loops do-while
我是一名新的java程序员,我正在编写一个程序,为3台打印机设置3个型号.如果用户输入了错误的值,我希望它继续向用户询问型号.我得到了它的工作,但只有当用户的第一个值在3个打印机之一的数字之间.如果第一个值不是可能值之一而第二个输入是,它仍然会重复循环.
package printing;
import java.util.Scanner;
public class newClass {
public static void main(String[] args) {
int count = 0;
String machine1 = "546";
String machine2 = "892";
String machine3 = "127";
Scanner s = new Scanner(System.in);
System.out.print("Model Number:");
String modelNumber = s.nextLine();
// increment count if first input value is wrong
if (!s.equals(machine1) || !s.equals(machine2) || !s.equals(machine3))
count++;
// if user inputs right value
while (true) {
if (modelNumber.equals(machine1)) {
System.out.println("Machine 1 is online");
break;
}
if (modelNumber.equals(machine2)) {
System.out.println("Machine 2 is online");
break;
}
if (modelNumber.equals(machine3)) {
System.out.println("Machine 3 is online");
break;
}
// keep looping if user does not input values for machine1, machine2 or machine3
do {
System.out.println("Try again");
System.out.print("Model Number:");
String modelNumberFalse = s.nextLine();
/* each time user gets value wrong the count variable goes up by 1 and
the loop breaks when count reaches 3 */
count++;
if (count == 3)
break;
} while (!s.equals(machine1) || (!s.equals(machine2)) || (!s.equals(machine3)) && (count < 2));
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,每次用户输入错误的值时,我希望count变量增加,直到达到3并且do while循环中断,但是在我输入错误的值超过3次之后它仍然要求输入型号.
有几个问题.这条线错了:
while(!s.equals(machine1) || (!s.equals(machine2)) || (!s.equals(machine3)) && (count < 2));
Run Code Online (Sandbox Code Playgroud)
s
是一个扫描仪,而不是一个字符串,这不是一个有效的比较.替换modelNumber
为s
得出:
while(!modelNumber.equals(machine1) || (!modelNumber.equals(machine2)) || (!modelNumber.equals(machine3)) && (count < 2));
Run Code Online (Sandbox Code Playgroud)
除非modelNumber,machine1,machine2和machine3都是相同的值,否则这不能为false.
此外,测试计数会弄乱这一点并且是多余的,因为您正在测试它并在循环内打破.
它应该是
while(!modelNumber.equals(machine1)
&& (!modelNumber.equals(machine2))
&& (!modelNumber.equals(machine3)));
Run Code Online (Sandbox Code Playgroud)
见德摩根定律.应用此规则给出
while(!(modelNumber.equals(machine1)
|| modelNumber.equals(machine2)
|| modelNumber.equals(machine3)))
Run Code Online (Sandbox Code Playgroud)
这可能更容易阅读.
另外,如果你用"return"代替"break",随着对do-while条件的改变,它起作用.所以还有其他事情要发生.在内部执行中调用break会导致控制返回到外部while循环的顶部.添加在中断之前设置的布尔标志以及在外部while循环中测试的布尔标志将是解决此问题的一种方法.或者只是使用return.
归档时间: |
|
查看次数: |
2269 次 |
最近记录: |