Java菜单进入无限循环

时间:2014-05-03 19:42:37

标签: java

我正在使用我正在执行的程序进行无限循环,并且我不确定如何通过它。在这几个小时工作,我无法弄明白。 (对不起,如果这对你们来说似乎很简单,但我还是java的新手)。基本上发生的事情就是一切都会先编译并按原样运行,但只要我输入一个选择它就会重复主菜单而不给我预期的操作。

例如,程序应该适用于我输入的位置" 1,2,3或4"作为一个选择,它显示"早上好"分别是英语,意大利语,西班牙语和德语,5结束该计划。相反,如果我输入1,2,3,4或5作为选择,菜单会自动重复。

输入除1-5之外的任何数字都会显示一条错误消息,指出所选内容无效。以便while循环按预期工作。所以有人能指出我做错了吗?

import java.util.Scanner;
import java.io.*;

public class Translator
{
    public static void main(String[] args)
    {
        // local variable to hold the menu selection
        int selection = 0;

        do
        {
            // display the menu
            displayMenu(selection);

            // perform the selected operation
            switch (selection)
            {
            case 1:
                System.out.println("Good Morning.");
                break;
            case 2:
                System.out.println("Buongiorno.");
                break;
            case 3:
                System.out.println("Buenos dias.");
                break;
            case 4:
                System.out.println("Guten morgen.");
                break;
            case 5:
                System.out.println("GoodBye!");
            break;
            }
        } while (selection != 5);
    }

    // the displayMenu module displays the menu and gets and validates
    // the users selection.
    public static void displayMenu(int selection)
    {
        //keyboard scanner
        Scanner keyboard = new Scanner(System.in);

        // display the menu
        System.out.println(" select a language and i will say good morning");
        System.out.println("1. English.");
        System.out.println("2. Italian.");
        System.out.println("3. Spanish.");
        System.out.println("4. German.");
        System.out.println("5. End the Program.");

        System.out.println("Enter your selection");

        // users selection
        selection = keyboard.nextInt();

        while (selection < 1 || selection > 5)
        {
            System.out.println ("that is an invalid select.");
            System.out.println (" Enter 1, 2, 3, 4, or 5.");
            selection = keyboard.nextInt();
        }
    }
}

4 个答案:

答案 0 :(得分:2)

问题是方法的参数是在Java中通过值传递的。因此,为displayMenu参数设置新值的selection末尾的部分根本不会更改selectionmain局部变量的值。因此,在main中,selection变量始终的值为0.

鉴于您未在selection中使用displayMenu的原始值,您应该将其转换为不带参数的方法,但返回所选的方法值:

public static int displayMenu()
{
    // Code to print out the menu [...]

    int selection = keyboard.nextInt();
    while (selection < 1 || selection > 5)
    {
        System.out.println ("that is an invalid select.");
        System.out.println (" Enter 1, 2, 3, 4, or 5.");
        selection = keyboard.nextInt();
    }
    return selection;
}

main

int selection;
do
{
    selection = displayMenu();
    switch (selection)
    {
        ...
    }
}
while (selection != 5);

答案 1 :(得分:0)

Java不支持“真正的”传递引用,这是您的程序似乎依赖的。您将变量初始化为0并要求方法更改它,这是不可能发生的。方法中的参数值仅仅是传递给它们的原始值的副本。一个小小的演示:考虑你有这种方法......

public static void increment(int a) {
    a++;
}

以及使用它的代码......

int a = 0;
increment(a);
System.out.println(a);
打印

0,因为唯一增加的是方法aincrement的本地副本。原始值保持不变。

您可以使您的方法返回Jon Skeet的答案中建议的值。

答案 2 :(得分:0)

当你遇到一个程序时,最简单的解决方案是使用调试工具 在eclipse或netbeans等每个编译器中存在的工具,不仅在这个程序中,而且在任何程序中都可以帮助你。
然后回到你的项目并使用这个工具。你可以找到你的错 祝你好运!!

答案 3 :(得分:0)

在do-while循环中调用displayMenu(),并且在方法之间传递值时出现问题。是的,你的缩进有问题。检查主题,如控制语句,书中的变量。改进版本如下所示:

package imporvedtranslator;

import java.io.*; 
import java.util.Scanner;

public class ImporvedTranslator
  {
  public static void main(String[] args)
    {
      int selection;
      selection = displayMenu();

      switch (selection)
        {
          case 1:
              System.out.println("Good Morning.");
              break;
          case 2:
              System.out.println("Buongiorno.");
              break;
          case 3:
              System.out.println("Buenos dias.");
              break;
          case 4:
              System.out.println("Guten morgen.");
              break;
          case 5:
              System.out.println("GoodBye!");
              break;
        }
    }

  private  static int displayMenu()
    {
      int sel;
      Scanner sc = new Scanner(System.in);

      System.out.println(" select a language and i will say good morning");
      System.out.println("1. English.");
      System.out.println("2. Italian.");
      System.out.println("3. Spanish.");
      System.out.println("4. German.");
      System.out.println("5. End the Program.");
      System.out.println("Enter your selection");

      sel = sc.nextInt();

      while (sel<1 || sel>5)
        {
          System.out.println ("that is an invalid select.");
          System.out.println (" Enter 1, 2, 3, 4, or 5.");
          sel = sc.nextInt();
        }

      return sel;
    }
}