0

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

例如,如果我输入“1”,菜单会识别出我输入了 1,并会再次显示菜单并显示“您输入了 1”。而不是调用dec.getDec(), 因为它应该根据 case 语句。任何有用的提示或建议将不胜感激。这是一项家庭作业,我并不是要找人为我或任何东西编写代码。我只需要指出正确的方向。

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);
    }   
}
4

2 回答 2

1

不使用case 'n':,只使用case n。你不需要单引号。还可以查看本教程关于Java 中的 Switch 语句,以了解如何在代码中使用它。

您当前实现的问题是因为您试图将一个int值(您在选择变量中)与char(在内部转换为其相应的 int 值,即 '1' 的 int 值与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 给了你完美的提示。参考您的控制如何通过您的逻辑来设置选择变量的值来考虑它。

于 2012-09-10T18:58:15.310 回答
1

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

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

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

于 2012-09-10T19:13:35.543 回答