2015-06-02 2 views
1

Я работаю над примером, используя оператор do-while loop и switch. То, что мне в основном нужно, - это аккумулировать числа и в зависимости от ввода пользователем добавлять, вычитать, умножать или делить (тип мини-калькулятора).Сбросить переменные обратно до нуля в цикле do-while Java

Проблема заключается в том, когда я прошу пользователя вернуться в главное меню, программа не сбрасывает значение, как оно есть до цикла. Результатом всегда является предыдущий результат.

Код, он объяснит это лучше.

import java.util.Scanner; 
public class SwitchLoopNumbers{ 
public static void main(String[] args){ 

    Scanner scan = new Scanner(System.in); 
    int numbers=0; 
    int result=0; 
    int option; 
    boolean quit = true; 
    String done=""; 
    do{ 
    System.out.println("CALCULATOR MENU"); 
    System.out.println("********** ****"); 
    System.out.println("\n1. Add"); 
    System.out.println("2. Substract"); 
    System.out.println("3. Multiply"); 
    System.out.println("4. Divide"); 

    System.out.println(); 
    System.out.print("Enter your option >> "); 
    option = scan.nextInt(); 

    while(quit){ 

     switch(option){ 

      case 1: 

       System.out.print("Enter numbers, type 0 when done >> "); 
       numbers = scan.nextInt(); 
       if(numbers==0) 
       quit=false; 
       result +=numbers; 
       break; 




      case 2: 
       System.out.print("Enter numbers, type 0 when done >> "); 
       numbers = scan.nextInt(); 
       result -=numbers; 
       if(numbers==0) 
       quit=false; 
       break; 

     } 

    } 





    System.out.println("The total is: "+result); 
    System.out.println("Back to main menu ? y/n "); 
    scan.nextLine(); 
    done = scan.nextLine(); 
    //I did reset numbers and result here to zero but it did not work 
    } 



    while("y".equalsIgnoreCase(done)); 
    System.out.println("Thank you for using calculator"); 

} 
} 

ответ

1

Здесь пара вещей. Чтобы ответить на ваш вопрос кратко, это связано с тем, что вы не переназначали свои переменные перед повторным циклом. Поскольку вы не переназначаете результат и не выходите, quit является ложным, поэтому он закрывает цикл, и результат не изменяется, поэтому он печатает тот же результат. Попробуйте следующее:

System.out.println("The total is: "+result); 
System.out.println("Back to main menu ? y/n "); 
scan.nextLine(); 
done = scan.nextLine(); 
numbers = 0; 
result = 0; 
quit = true; 

Я думаю, что это наиболее прямолинейное решение вашей проблемы.

EDIT: Я также хотел добавить, что использование quit как условия while кажется немного контр-интуитивным. Если бы я увидел условие quit, которое было истинным, мое предположение состояло бы в том, что он нарушит цикл, а не продолжит его. Вы можете сделать код более понятным, указав более значимые имена переменных. Таким образом, вместо того, чтобы сказать что-то вроде:

boolean quit = true; 
while(quit) { 
    //do stuff 
    if (some_condition) { 
     quit = false; 
     //close loop 
    } 
} 

Это может быть немного понятнее:

boolean quit = false; 
while(!quit) { 
    //do stuff 
    if (some_condition) { 
     quit = true; 
     //close loop 
    } 
} 

Просто общее предложение.

+0

я вижу. То, что я делал раньше, - это сброс чисел и результат точно так же, как в вашем ответе, но я не сбросил цикл обратно в true. Теперь это имеет смысл, работает, как и предполагалось. Спасибо за помощь. – Ivanko

1

Вы можете попробовать позвонить main() еще раз, но я не уверен, что это сработает, решение может быть сделано, например, на ваш собственный метод. init() - где вы установите vars в состояние init и, например. work(), что будет оставшийся код: D

EDIT: вы можете сделать это таким образом

 import java.util.Scanner; 

     public class main { 
    //if you want work with result after user will write "y" in the end 
      static int result = 0; 

      public static void main(String[] args) { 
       Scanner scan = new Scanner(System.in); 
       int numbers = 0; 

       int option; 
       boolean quit = false; 
       String done = ""; 
    //int result = 0; // if you want also init result 



        // menu 
        System.out.println("CALCULATOR MENU"); 
        System.out.println("********** ****\n"); 
        System.out.println("1. Add"); 
        System.out.println("2. Substract"); 
        System.out.println("3. Multiply"); 
        System.out.println("4. Divide"); 

        // user menu input read 
        System.out.println(); 
        System.out.print("Enter your option >> "); 
        option = scan.nextInt(); 

        switch (option) { 
        case 1: 
         while (!quit) { 
          System.out.print("Enter numbers, type 0 when done >> "); 
          numbers = scan.nextInt(); 
          if (numbers == 0) { 
           quit = true; 
          } 
          result += numbers; // result = result + numbers 
         } 

         break; 
        case 2: 
         while (!quit) { 
          System.out.print("Enter numbers, type 0 when done >> "); 
          numbers = scan.nextInt(); 
          result -= numbers; // result = result - numbers 
          if (numbers == 0) { 
           quit = true; 
          } 
         } 
         break; 
        default: 
          System.out.println("Bad inpout"); 
         break; 
        } 


       System.out.println("The total is: " + result); 
       System.out.println("Back to main menu ? y/n "); 
       scan.nextLine(); 
       done = scan.nextLine(); 

//recursive call - run main() again 
       if (done.equals("y")) { 
        main(args); 
       } else { 
        System.out.println("Thank you for using calculator"); 
       } 

      } 

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