2014-07-16 9 views
-1

Следующий код создает ошибку времени выполнения, однако я не могу понять, что не так. Цикл while внутри кода не прекращается, и это вызывает ошибку времени выполнения (я предполагаю). Любая помощь будет принята с благодарностью.Ошибка бесконечного цикла Java

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); 
    } 


} 
} 
+1

, что во время выполнения? цикл может бесконечно бесконечно –

+1

Так как сумма является только одним значением, 'sum! = 4 || sum! = 5' всегда будет успешным. Просто потому, что даже если 'sum' is' 4', это не '5' ... –

+0

Шансы на это довольно низки, и rgettman понял это. Кроме того, знаки процента могут использоваться взаимозаменяемо как обратные косые черты – AJHacker

ответ

4

while условие цикла представляет собой логическую ошибку, а не какой-либо вид ошибки во время выполнения выброшены на JVM. sum всегда будет «не 4» или «не 5» или «не любое другое число». Вы хотите логическое «и». Постарайся

while(sum!=4 && sum!=5 && sum!=6 && sum!=8 && sum!=9 && sum!=10){ 

Вы можете также уплотнить список немного с:

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

Или:

ошибки
List<Integer> exitValues = Arrays.asList(4, 5, 6, 8, 9, 10); 
while(!exitValues.contains(sum)){ 
+0

Спасибо, он работал – AJHacker

+0

@rgettman: интересно, почему компилятор не проверяет такие вещи ... –

+0

@CommuSoft Компилятор Java не может точно знать, какое условие вы хотели создать против того, что вы создали. WYTIWYG: То, что вы набираете, это то, что вы получаете. Компилятор выполнит именно то, что вы говорите, чтобы выполнить. – rgettman

Смежные вопросы