【问题标题】:Nested do while loop jump from one to another嵌套 do while 循环从一个跳转到另一个
【发布时间】:2016-03-19 02:29:57
【问题描述】:

我在尝试使用 do-while 循环时遇到了一些逻辑问题。在我的 main() 方法中。如果用户输入大于 6 的值,我会一次又一次地提示用户:

do{
System.out.println("select your option: ");
        System.out.println("1.option1");
        System.out.println("2.option2");
        System.out.println("3.option3");
        System.out.println("4.option4");
        System.out.println("5.option5");
        System.out.println("6.Quit");
        optionChoice = sc.nextInt();
        switch (optionChoice) {
        case 1:
            option1Method();
            break;
        } 
 } while (optionChoice > 6);

然后在我的option1Method() 中,我还有另一个 do while 循环:

    do {
        System.out.println("select your option: ");
        System.out.println("1.opt1 method1");
        System.out.println("2.opt2 method2");
        System.out.println("3.opt3 method3");
        System.out.println("4.Back");
        optOption = sc.nextInt();
        switch (optOption ) {
        case 1: //do stuffs, same for case 2 and 3
           break;
        case 4: return;
        default: break;
       }
} while (optOption > 4);

对于这种方法,我试图一次又一次地提示用户选择,只要他们输入大于 4 的任何内容。然后,当他们输入 4 时,它应该返回到 main() 方法中的 do while 循环。

但是,对于第二个 do-while 循环,当我输入 4 时,程序本身就被终止了。有什么想法吗?

提前致谢。

【问题讨论】:

  • 第二段代码是你option1Method()的正文吗?
  • 是的,第二块属于option1Method()。当用户输入 4.Back 时,我尝试做类似的事情,然后它会回到 main 方法内部的第一段 do while
  • @I Was Solost,@nuaavee 回答是否解决了您最初的问题。我的意思是当数字大于 6 时,程序应该继续提示用户选择一个选项,因为即使数字小于 6,它也会询问用户?
  • 另外,你可以试试我建议的optionChoice > 6 || optionChoice == 1吗?
  • optOption != 4 作为第二个 do-while 循环中的条件怎么样

标签: java loops do-while


【解决方案1】:

在main方法中设置条件为:

optionChoice != 6

【讨论】:

  • 因为 1 到 5 不是 > 6 并且您的循环将退出。根据您的选项描述,只有当等于 6 时,循环才会退出。你可能原本打算写while (optionChoice < 6);
  • 我猜这解决了跳出循环的问题,但是我不确定这是否解决了当用户输入的数字大于6时保持循环的问题。跨度>
  • @nuaavee 嘿抱歉,我意识到仍然存在一个小问题,即当我在第二个 do while 循环中成功执行案例 1 中的方法时,它会立即跳回第一个做一会儿。在用户输入 4.Back 然后返回到第一部分之前,是否有任何其他方法可以将其保留在第二部分附近?
【解决方案2】:

我不确定这是否是你想要的,但我已经为你写了以下内容:

import java.util.Scanner;

public class Answer {
  static Scanner sc = new Scanner(System.in);
  static int optionChoice;

  public static void main(String[] args) {

    do{
      System.out.println("select your option: ");
      System.out.println("1.option1");
      System.out.println("2.option2");
      System.out.println("3.option3");
      System.out.println("4.option4");
      System.out.println("5.option5");
      System.out.println("6.Quit");
      optionChoice = sc.nextInt();

      switch (optionChoice) {
        case 1:
            option1Method();
          break;
      }
    } while (optionChoice > 6);
  }

  public static void option1Method() {

    int optOption;

    do {
       System.out.println("select your option: ");
       System.out.println("1.opt1 method1");
       System.out.println("2.opt2 method2");
       System.out.println("3.opt3 method3");
       System.out.println("4.Back");
       optOption = sc.nextInt();
       switch (optOption ) {
       case 1: //do stuffs, same for case 2 and 3
          break;
       case 4:
        optionChoice = 7; // you have to make this value greater than 6 if you want to continue in the loop
        return;
       default: break;
      }
    } while (optOption > 4);
  }
}

当你输入 4 时的问题是你回到了 main 方法,而你为 optionChoice 输入的值是 1,这使得 false 成为 while 循环的条件。

编辑:

作为对@Timeout 的回应,他声称我假设 optionChoice 是一个“全局变量”是完全正确的。

为了保持你的功能,我猜你应该在 main() 方法的 do-while 循环中有以下条件:

optionChoice > 6 || optionChoice == 1

编辑:

如果在第二个 while 循环中作为条件添加会怎样

optOption != 4

这样您将一直处于该循环中,直到用户输入 4

EDIT TO HANDLE optionXMethod where X is a number:

do{
      System.out.println("select your option: ");
      System.out.println("1.option1");
      System.out.println("2.option2");
      System.out.println("3.option3");
      System.out.println("4.option4");
      System.out.println("5.option5");
      System.out.println("6.Quit")
      optionChoice = sc.nextInt();

      switch (optionChoice) {
        case 1:
            option1Method();
            break;
        case 2:
            option2Method();
            break;
        case X:
            optionXMethod();
          break;
      }
    } while (optionChoice != 6);

void option1Method() {
    int optOption;

    do {
       System.out.println("select your option: ");
       System.out.println("1.opt1 method1");
       System.out.println("2.opt2 method2");
       System.out.println("3.opt3 method3");
       System.out.println("4.Back");
       optOption = sc.nextInt();
       switch (optOption ) {
       case 1: //do stuffs, same for case 2 and 3
          break;
// you do not need the case 4: because when optOptiontakes the value of 4 it leaves the loop

   default: break;
  }
} while (optOption != 4);

}

....

一般情况:

void optionXMethod() {
    int optOption;

    do {
       System.out.println("select your option: ");
       System.out.println("1.opt1 method1");
       System.out.println("2.opt2 method2");
       System.out.println("3.opt3 method3");
       System.out.println("4.opt4 method4");
       // more options
       System.out.println("X.Back"); // where X is the number option of Back
       optOption = sc.nextInt();
       switch (optOption ) {
       case 1: //do stuffs, same for case 2 and 3
          break;
// you do not need the case 4: because when optOptiontakes the value of 4 it leaves the loop

   default: break;
  }
} while (optOption != X); // whatever the value of X is should be consider for this condition

}

【讨论】:

  • 让我知道这是否是您期望的行为,或者您是否可以添加任何进一步的解释以便我可以改进我的答案。我已经运行了这个答案,当用户首先输入一个大于 6 的数字时,它会一次又一次地提示用户。如果他选择 1 个option1Method() 运行,如果用户输入一个大于 4 的数字,它会一次又一次地提示用户。
  • @Timeout,我已经编辑了我的答案,我认为在这种情况下它解决了@I Was So Lost 最初想要做的事情。
  • @Imiguelvargasf 嗯,但是当用户从第二段代码成功执行案例时,程序本身刚刚终止。
  • @IWasSoLost,我想我添加的最后一个编辑解决了你的问题
  • 抱歉,假设我的第二个 do while 循环包含 9 个选项和 9.Back。所以在我的案例 9 中,我应该这样做: optionChoice = 10;return;和 while (optOption != 9);我说的对吗?
猜你喜欢
  • 1970-01-01
  • 2022-10-12
  • 2016-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
相关资源
最近更新 更多