exc*_*ion 7 java switch-statement
通过一些编程任务(第一年)拖网,我想出了这个.当我运行它时,程序直接转到switch语句的默认值.现在已经连续24小时了,所以我几乎察觉不到,但我发现什么都不对.
任何人都可以指出我的写作方向.我不希望你为我做这件事
// 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);
}
}
Run Code Online (Sandbox Code Playgroud)
And*_*Mao 13
好吧,你正在比较int(由于menuSelect = Scanner.nextInt())和a char,所以当然它不匹配.在switch语句中,该字符'1'等于49赋值给int时的值.从Java语言规范中的switch语句来看,这是一个鲜为人知的事实
case与switch语句关联的每个常量表达式必须可分配(§5.2)到switchExpression 的类型.
例如,以下(有效,令人惊讶的)代码打印49:
int a = '1';
System.out.println(a);
Run Code Online (Sandbox Code Playgroud)
所以,case constant并且switch(expression)不需要是相同的类型,这不会为原始类型生成编译错误.您可以使用以解决此问题
switch(menuSelect) {
case 1:
...
case 2:
...
}
Run Code Online (Sandbox Code Playgroud)
你也可以阅读charin而不是a int,并保持原样.但是Scanner没有nextChar()方法,所以你必须使用nextByte()并转换它.
char menuSelect = (char) keyboardIn.nextByte()
Run Code Online (Sandbox Code Playgroud)
您正在获取int值,但随后将其与char值进行比较.语句中的char值switch将被提升为相应的值int.
实际上,如果你键入49('1'的Unicode值),它将打印"请输入存款金额"等.
只是改变
case '1':
Run Code Online (Sandbox Code Playgroud)
至
case 1:
Run Code Online (Sandbox Code Playgroud)
等等
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |