我无法将下面的菜单从我的驱动程序中运行。程序将执行,但在我输入数字之前它不会显示我的菜单。之后它将正确显示,并正确读取选择,但不会调用我在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);
}
}
答案 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.
使用它你应该能够看到问题所在,如果你需要更多的帮助评论这个答案,我会看看我能做的还有更多。