在 do-while 循环中将变量重置为零 Java

Reset variables back to zero in do-while loop Java

我正在研究一个使用 do-while 循环和 switch 语句的示例。我基本上需要的是累积数字,并根据用户输入进行加、减、乘或除(迷你计算器类型)。

问题是当我要求用户返回主菜单时,程序不会像循环前那样重置值。结果总是以前的结果。

这是代码,它会更好地解释它。

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

}
}

这里发生了几件事。简明扼要地回答你的问题,这是因为你在重新循环之前没有重新分配你的变量。由于您没有重新分配结果并退出,因此退出为假,因此它关闭了循环,并且结果不变,因此它随后打印相同的结果。试试这个:

 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;

我认为这是解决您问题的最直接的方法。

编辑:我还想补充一点,使用 quit 作为 while 条件似乎有点违反直觉。如果我看到条件退出是真的,我的假设是它会打破循环,而不是继续循环。您可以通过指定更有意义的变量名称来使您的代码更清晰一些。所以不要说这样的话:

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

只是一般性建议。

您可以尝试再次调用 main(),但我不确定它是否有效,解决方案可以是制定您自己的方法,例如。 init() - 您将在其中将变量设置为初始状态,例如。 work(),剩下的代码是什么:D

编辑:你可以这样做

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

            }

        }