Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌套的do while循环从一个跳转到另一个_Java_Loops_Do While - Fatal编程技术网

Java 嵌套的do while循环从一个跳转到另一个

Java 嵌套的do while循环从一个跳转到另一个,java,loops,do-while,Java,Loops,Do While,在尝试使用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"); Sys

在尝试使用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);
然后在我的
选项1method()
中,我有另一个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时,程序本身刚刚终止。有什么想法吗


提前感谢。

在主方法中,将条件设置为:

optionChoice != 6

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

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循环的条件

编辑:

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);
作为对@Timeout的回应,他声称我假设optionChoice是一个“全局变量”,这是完全正确的

为了保持功能,我想您应该在main()方法的do while循环中设置以下条件:

编辑:

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);
如果在第二个while循环中添加一个条件呢

optOption != 4
因此,在用户输入4之前,您将一直处于该循环中

编辑以处理选项xMethod,其中X是一个数字:

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

}

第二段代码是您的
选项1方法()的主体吗?
是的,第二段代码属于选项1方法()。当用户输入4.Back时,我试着做一些类似的事情,然后返回到第一个do,而它在main中method@I太迷茫了,@nuavee-answer能解决你最初的问题吗。我的意思是,当数字大于6时,程序应该继续提示用户输入选项,因为即使数字小于6,它也会询问用户。此外,您可以试试我建议的
optionChoice>6 | | optionChoice==1
?关于
option!=4
作为第二个while循环中的条件,因为1到5不大于6,循环将退出。根据选项描述,只有当等于6时,循环才会退出。您可能打算在编写时编写
(选项选择<6)最初。我想这解决了退出循环的问题,但我不确定这是否解决了当用户输入的数字大于6时保持在循环中的问题。@nuaavee Hey抱歉,我意识到还有一个小问题,那就是当我在do while循环的第二部分成功执行案例1中的方法时,它会立即跳回do while的第一部分。在用户输入4之前,是否有其他方法将其保留在do的第二部分。返回,然后返回到第一部分?让我知道这是否是您期望的行为,或者您是否可以添加任何进一步的解释,以便我可以改进我的答案。我已经运行了这个答案,当用户首先输入一个大于6的数字时,它会一次又一次地提示用户。如果他选择1
option1Method()
运行,并且如果用户输入的数字大于4,它会一次又一次地提示用户。@超时,我已经编辑了我的答案,我认为在这种情况下,它解决了@I一开始想做的事情。@Imiguelvargasf-Hmm但是当用户从第二段代码成功执行案例时,程序本身刚刚终止。@IWasSoLost,我想我添加的最后一次编辑解决了您的问题抱歉,但假设我的第二个do while循环包含9个选项和9.Back。在我的例子9中,我应该这样做:optionChoice=10;返回;而while(option!=9);我说得对吗?