Java:Switch语句没有正确调用方法

时间:2012-09-10 18:55:13

标签: java

我无法将下面的菜单从我的驱动程序中运行。程序将执行,但在我输入数字之前它不会显示我的菜单。之后它将正确显示,并正确读取选择,但不会调用我在case语句中列出的方法。

例如,如果我输入'1',菜单将识别我输入1并再次显示菜单“你输入1”。而不是根据案例陈述调用dec.getDec()。任何有用的提示或建议将不胜感激。这是一项家庭作业,我不是想让别人为我或其他任何东西编写代码。我只需要指出正确的方向。

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

public class Menu {
    Scanner scan = new Scanner(System.in); 
    int selection;

    public int GetSelection()
   {
       selection = scan.nextInt();
       return selection;
   }

    public void display()
    {

          System.out.println("Please choose an option from the following:"); 
          System.out.println("[1] Convert Decimal to Binary"); 
          System.out.println("[2] Convert Decimal to Hexadecimal"); 
          System.out.println("[3] Convert Binary to Decimal"); 
          System.out.println("[4] Convert Binary to Hexadecimal"); 
          System.out.println("[5] Convert Hexadecimal to Decimal"); 
          System.out.println("[6] Convert Hexadecimal to Binary"); 
          System.out.println("[0] Exit");

          System.out.println("\n");
          System.out.println("You entered: " + selection);
   }

}


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


public class Driver
{

    public static void main(String[] args)throws IOException {

            LineWriter lw = new LineWriter("csis.txt");
            int selection;

            Decimal dec = new Decimal();
            Binary bin = new Binary();
            Hexadecimal hex = new Hexadecimal();
            Menu menu = new Menu();


        do{ 
            menu.display();

            selection=menu.GetSelection();

            switch (selection){

            case '1':{ dec.getDec();
                      break;}
            case '2':{ dec.getHex();
                      break;}
            case '3':{ bin.getBin();
                      break;}
            case '4':{ bin.getHex();
                      break;}
            case '5':{ hex.getHex();
                      break;}
            case '6': { hex.getDec();
                      break;  }     
            //default: System.out.println("Error: Unrecognized Selection");
            //          break;

           }
        }while (selection !=0);
    }   
}

2 个答案:

答案 0 :(得分:1)

请勿使用case 'n':,只需使用case n。你不需要单引号。另请查看Switch Statements in Java上的本教程,了解如何在代码中使用它。

您当前实施的问题是因为您尝试将int值(您在选择变量中)与char进行比较(这是内部转换为相应的int值,即int值'1'与1)不同。

您可以通过以下代码看到差异:

switch(selection){

case '1':
    System.out.println("Hello World from char");
    break;

case 1:
    System.out.println("Hello World from int");
    break;
}

因此,当您设置selection = 1时,您会找到int块的输出,但是如果设置selection = '1',您将找到char块的输出

请注意,我假设你没有在Java 7中运行

<小时/> 注意:您的代码还有另一个问题。 @Shaded给了你完美的暗示。请参考控件如何通过逻辑设置选择变量的值来考虑它。

答案 1 :(得分:1)

由于这是作业,我不会给你整个解决方案,但我会帮助你到那里......

您的问题来自您使用Scanner,此页面的有用部分为A scanning operation may block waiting for input.

使用它你应该能够看到问题所在,如果你需要更多的帮助评论这个答案,我会看看我能做的还有更多。