Java无限循环错误

Java无限循环错误,java,Java,下面的代码生成了一个运行时错误,但是我无法找出错误所在。代码中的while循环不会停止运行,这会导致我假设的运行时错误。任何帮助都将不胜感激 import java.lang.Math; class Test { public static void main (String[] args) throws java.lang.Exception { int first = 0; int sum = 0; int second = 0; while((((((sum

下面的代码生成了一个运行时错误,但是我无法找出错误所在。代码中的while循环不会停止运行,这会导致我假设的运行时错误。任何帮助都将不胜感激

import java.lang.Math;
class Test
{
public static void main (String[] args) throws java.lang.Exception
{
    int first = 0;
    int sum = 0;
    int second = 0;
    while((((((sum!=4 || sum!=5) || sum!=6) || sum!=8) || sum!=9) || sum!=10)){
        first = 1 + (int)(Math.random() * ((6 - 1) + 1));
        second = 1 + (int)(Math.random() * ((6 - 1) + 1));
        sum = first+second;
        System.out.printf("Computer rolls a %d and a %d, for a total of %d.%n",first,second,sum);
    }


}
}
while循环条件表示逻辑错误,而不是JVM引发的任何类型的运行时错误。总和将始终不是4或5,或不是任何其他数字。你需要一个逻辑的和。试一试

while(sum!=4 && sum!=5 && sum!=6 && sum!=8 && sum!=9 && sum!=10){
您还可以使用以下内容将列表稍微压缩:

while((sum < 4 || sum > 6) && (sum < 8 || sum > 10)){
或:


什么运行时错误?循环可以无限随机,因为和只有一个值,和!=4 | |总和!=5.你永远都会成功。只是因为即使总和是4,也不是5……发生这种情况的几率很低,而哈格特曼发现了这一点。此外,百分号可以互换使用作为反斜杠。您错误地认为百分号和反斜杠在printf调用中是可互换的。%n通常表示将在文本中插入变量,后面的字符表示其类型,例如%s是字符串,%d是双精度字符。\是一个转义字符,它与后面的字符一起告诉Java编译器将一个特殊字符放入字符串文本或字符中\n和%n插入换行符的行为实际上是相同的,尽管%n更独立于平台。但是\d不是有效的转义字符,它肯定与printf中的%d不同,\f是formfeed,而%f是一个浮点变量。@CommuSoft Java编译器无法确切地知道您要创建的条件与您创建的条件。WYTIWYG:你输入的就是你得到的。编译器将完全执行您告诉它执行的内容。mono开发IDE可以检测到一些冗余的赋值和if/while/for语句,这些语句总是正确的。总的来说,这个问题是无法确定的。但由于一个变量在一个条件下只能有一个值,如x!=a | | x!=b带a!=b将永远保持。。。
List<Integer> exitValues = Arrays.asList(4, 5, 6, 8, 9, 10);
while(!exitValues.contains(sum)){