当它达到匹配的数字(例如88、77等)时,我需要结束while循环。
import java.util.Scanner;
public class LabProgram {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int userNum = scan.nextInt();
if ((userNum >= 20) && (userNum <= 98)){
System.out.print(userNum + " ");
while ((userNum != 11) || (userNum != 22) || (userNum != 33) || (userNum != 44) || (userNum != 55) || (userNum != 66) || (userNum != 77) || (userNum != 88) || (userNum != 99)){
userNum = userNum - 1;
System.out.print(userNum + " ");
}
}
else{
System.out.print("Input must be 20-98");
}
System.out.print("\n");
}
}
但是,当它运行时,它永远不会离开循环,即使该数字达到了while循环中我拥有的匹配数之一。请帮忙。
答案 0 :(得分:3)
if(userNum != 11) || (userNum != 22) || (userNum != 33) || (userNum != 44) || (userNum != 55) || (userNum != 66) || (userNum != 77) || (userNum != 88) || (userNum != 99)
将始终为真,因为userNum
不能一次成为所有这些值。将||
替换为&&
:
if(userNum != 11) && (userNum != 22) && (userNum != 33) && (userNum != 44) && (userNum != 55) && (userNum != 66) && (userNum != 77) && (userNum != 88) && (userNum != 99)
使用模运算符可以使此操作更容易:
if(userNum % 11 != 0)
答案 1 :(得分:2)
问题出在这一行。
if(userNum != 11) || (userNum != 22) || (userNum != 33) || (userNum != 44) || (userNum != 55) || (userNum != 66) || (userNum != 77) || (userNum != 88) || (userNum != 99)
如果userNum为任意数字,则不能一次为11、22、33、44、55、66、77、88和99,这意味着您的程序将继续运行。正如@Carcigenicate所说,您需要&&(和)运算符。
答案 2 :(得分:2)
您可以使用以下代码在使用数组达到匹配数字时结束while循环。
public class stopWhileTest{
public static void main(String arg[]) {
int[] number = {11, 22, 33, 44, 55, 66, 77, 88};
Scanner scan = new Scanner(System.in);
int userNum = scan.nextInt();
if ((userNum >= 20) && (userNum <= 98)){
System.out.print(userNum + " ");
while(!contains(number,userNum)){
userNum = userNum - 1;
System.out.print(userNum + " ");
}
}
else{
System.out.print("Input must be 20-98");
}
System.out.print("\n");
scan.close();
}
public static boolean contains(final int[] array, final int v) {
boolean result = false;
for(int i : array){
if(i == v){
result = true;
break;
}
}
return result;
}
}
希望此解决方案有效。
答案 3 :(得分:1)
尝试在此处使用&&运算符代替OR
import java.util.Scanner;
public class LabProgram {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int userNum = scan.nextInt();
if ((userNum >= 20) && (userNum <= 98)){
System.out.print(userNum + " ");
while (userNum != 11 && userNum != 22&& userNum != 33 && userNum != 44 && userNum != 55 && userNum != 66 && userNum != 77&& userNum != 88 && userNum != 99){
userNum = userNum - 1;
System.out.print(userNum + " ");
}
}
else{
System.out.print("Input must be 20-98");
}
System.out.print("\n");
}
}
答案 4 :(得分:1)
您的代码似乎正在搜索11
的倍数,因此我希望测试11的余数。另外,您可以使用x--
代替x = x - 1
。最后,使用do-while
循环可以使它更简洁。喜欢,
Scanner scan = new Scanner(System.in);
int userNum = scan.nextInt();
if (userNum >= 20 && userNum <= 98) {
do {
System.out.print(userNum + " ");
userNum--;
} while (userNum % 11 != 0);
System.out.println();
}