2015-09-29 5 views
1

// Петля, которая не работает. Я продолжаю нажимать число, которое равно 1,2,3,4 или 5, но оно не выйдет из цикла. Оператору, как представляется, присваивается значение, которое я вводил, но он все равно не выйдет из цикла while. Я пытаюсь написать базовый калькулятор с помощью простых математических операций, но это стало очень неприятной проблемой.Java - пока цикл не завершится

import java.util.Scanner; 
public class BasicCalculatorTwo { 
    public static void main(String[] args){ 
     Scanner scanner = new Scanner(System.in); 
     int operator; 
     double fnum, snum, answer; 
     operator = 0; 

     System.out.println("Enter first number : "); 
     fnum = scanner.nextDouble(); 
     System.out.println("Enter second number : "); 
     snum = scanner.nextDouble(); 

     while(operator != 1 || operator != 2 || operator != 3 || operator != 4 || operator != 5){ 
      System.out.println(); 
      System.out.println(fnum + " ? " + snum + " = "); 
      System.out.println("1 : Add"); 
      System.out.println("2 : Subtract"); 
      System.out.println("3 : Multiply"); 
      System.out.println("4 : Divide"); 
      System.out.println("5 : Modularize"); 
      operator = scanner.nextInt(); 
     } 

     switch(operator){ 
      case 1: 
       answer = fnum + snum; 
       break; 
      case 2: 
       answer = fnum - snum; 
       break; 
      case 3: 
       answer = fnum * snum; 
       break; 
      case 4: 
       answer = fnum/snum; 
       break; 
      case 5: 
       answer = fnum % snum; 
       break; 
      default: 
       break; 
      System.out.println(fnum + " ? " + snum + " = " + answer); 
      scanner.close(); 
     } 
    } 
} 
+4

Условие цикла while ** всегда ** истинно. Операционная переменная всегда либо не 1, либо не 2 - подумайте об этом логически, и вы увидите. Вы хотите использовать '&&' not '||'. –

+0

'operator! = 1 OR operator! = 2 OR operator! = 3 OR operator! = 4 OR operator! = 5' - это всегда будет« true ». Может быть, вы хотели использовать '==' или '&&'? В любое время, когда у вас есть бесконечный цикл, посмотрите на свое выражение управления и свою управляющую переменную. – mkobit

+0

О, я буквально просто прочитал цикл while вслух, и теперь я понимаю, почему он застрял в бесконечном цикле. – ArcticJag

ответ

2

У вас возникли проблемы с циклом.

while (operator != 1 || operator != 2 || operator != 3 || operator != 4 || operator != 5) 

Это должно быть

while (operator != 1 && operator != 2 && operator != 3 && operator != 4 && operator != 5) 

В принципе, вы хотите сказать, что если оператор! = 1, то сделайте петлю. Точно так же каждый из остальных. Если вы должны были использовать & & операторов вместо || это будет работать намного лучше.

Действительно, вы хотите сказать, что оператор> 1 & & < 5, затем цикл, иначе перерыв.

while(operator < 1 || operator > 5) 
{ 
    DoPrintStuffHere(); 
} 

Подумайте об этом логически, вы хотите, чтобы любое число меньше 1 или больше 5, чтобы снова зациклиться.

+0

Когда я добавляю «while» (оператор <1 &&> 5), цикл while не запускается. – ArcticJag

+0

Ой, да, я сделал то же самое, что и ты. Это всегда неверно. Вы не можете быть всегда < 1 && > 5. В этом случае вы должны использовать оператор или operator || – GubiD

+0

@Hovercraft, полный угрей, дал тот же ответ в комментарии – Mousey

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