有没有人能指出我的写作方向。我不希望你为我做这件事
// Practical 5B - Question 1
// Nathan Griffin
// 28/02/2013
// Program to simulate a continuos system of deposits and withdraw for a bank account until user exits.
import java.util.Scanner;
public class SingleAccountSim
{
public static void main(String [] args)
{
Scanner keyboardIn = new Scanner(System.in);
BankAccount account = new BankAccount();
int menuSelect = 0;
double depositIn, withdrawalOut;
do
{
System.out.println("*_*_*Monopoly Bank*_*_*");
System.out.println("1. Deposit money");
System.out.println("2. Withdraw money");
System.out.println("3. Get balance");
System.out.println("4. Quit");
menuSelect = keyboardIn.nextInt();
switch(menuSelect)
{
case '1': System.out.print("Please enter the deposit amount: ");
depositIn = keyboardIn.nextDouble();
account.deposit(depositIn);
break;
case '2': System.out.print("Please enter the withdrawl amount: ");
withdrawalOut = keyboardIn.nextDouble();
account.withdraw(withdrawalOut);
break;
case '3': System.out.print("Your current balance is " + account.getBalance());
break;
case '4': System.out.print("Quitting.....");
break;
default: System.out.println("Invalid selection. Please try again");
}
}while(menuSelect !=4);
}
}
答案 0 :(得分:13)
好吧,您要将int
(由于menuSelect = Scanner.nextInt()
)与char
进行比较,因此当然不会匹配。在switch语句中,字符'1'
在分配给int时等效于49
的值。从switch statement in the Java Language Specification开始,这是一个鲜为人知的事实
与
case
语句关联的每个switch
常量表达式必须可分配(第5.2节)到switch
表达式的类型。
例如,以下(有效,令人惊讶的)代码打印49
:
int a = '1';
System.out.println(a);
因此case constant
和switch(expression)
不需要是相同的类型,这不会为基本类型生成编译错误。您可以使用
switch(menuSelect) {
case 1:
...
case 2:
...
}
您还可以阅读char
而不是int
,并保持原样。但是,扫描程序没有nextChar()
方法,因此您必须使用nextByte()
并进行转换。
char menuSelect = (char) keyboardIn.nextByte()
答案 1 :(得分:8)
您获取int
值,然后将其与char
值进行比较。 char
语句中的switch
值正在提升为相应的int
。
实际上,如果你输入49('1'的Unicode值),它将打印“请输入存款金额”等。
只需更改
case '1':
到
case 1:
等
答案 2 :(得分:4)
menuSelect
是int
而'1'
是char
,一旦转换为int
即49
...只需删除引号,它应该按预期工作。
答案 3 :(得分:0)
您将输入作为int类型提取,但在您的情况下使用String参数。
将您的案例更改为:
case 1:
// do something
break;
case 2:
// do something
break;
//etc..