Java 方法甚至在循环外运行

Java 方法甚至在循环外运行,java,Java,我有这个方法,可以作为其他方法的菜单: public static void menu(){ boolean works = true; System.out.println("\n1 - Register Car\t2 - Register Client\t3 - Rent car\n4 - Returning car\t5 - Show list\t6 - Exit\n"); System.out.print("Input: "); int operaca

我有这个方法,可以作为其他方法的菜单:

public static void menu(){

    boolean works = true;

    System.out.println("\n1 - Register Car\t2 - Register Client\t3 - Rent car\n4 - Returning car\t5 - Show list\t6 - Exit\n");
    System.out.print("Input: ");
    int operacao = scan.nextInt();

    do {
        if (operacao == 1) {
            cadVeiculo();
        } else if (operacao == 2) {
            cadCliente();
        } else if (operacao == 3) {
            locar();
        } else if (operacao == 4) {
            devolver();
        } else if (operacao == 5) {
            listar();
        } else if (operacao == 6){
            works= false;
        }
    } while (works);
}
我不明白的是,当我运行程序并按6键时,程序停止,ok。但当我按1注册一辆车,然后按6退出程序时,程序会不断要求我输入另一个输入

我所期望的是,当我操作程序并按6退出时,它只会完全停止程序。

在do while循环中移动println和scanner.nextInt行:

下面是一个修改后的示例,它只打印出方法名称:

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    menu();
  }

  public static void menu() {
    Scanner scan = new Scanner(System.in);
    boolean works = true;
    do {
      System.out.println(
          "\n1 - Register Car\t2 - Register Client\t3 - Rent car\n4 - Returning car\t5 - Show list\t6 - Exit\n");
      System.out.print("Input: ");
      int operacao = scan.nextInt();
      if (operacao == 1) {
        System.out.println("cadVeiculo();");
      } else if (operacao == 2) {
        System.out.println("cadCliente();");
      } else if (operacao == 3) {
        System.out.println("locar();");
      } else if (operacao == 4) {
        System.out.println("devolver();");
      } else if (operacao == 5) {
        System.out.println("listar();");
      } else if (operacao == 6) {
        System.out.println("Goodbye!");
        works = false;
      }
    } while (works);
    scan.close();
  }
}
用法示例:


你只问了一次。您需要在do while循环中将扫描的int分配给operacao变量的行移动到第一个if之前。
1 - Register Car    2 - Register Client 3 - Rent car
4 - Returning car   5 - Show list   6 - Exit

Input: 1
cadVeiculo();

1 - Register Car    2 - Register Client 3 - Rent car
4 - Returning car   5 - Show list   6 - Exit

Input: 3
locar();

1 - Register Car    2 - Register Client 3 - Rent car
4 - Returning car   5 - Show list   6 - Exit

Input: 4
devolver();

1 - Register Car    2 - Register Client 3 - Rent car
4 - Returning car   5 - Show list   6 - Exit

Input: 6
Goodbye!