7

浏览了一些编程任务(第一年),我想出了这个。当我运行它时,程序直接进入 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);

    }
}
4

4 回答 4

13

好吧,您正在比较 a int(due to menuSelect = Scanner.nextInt()) 和 a char,所以它当然不匹配。在 switch 语句中,当分配给 int 时,字符'1'相当于一个值。49Java 语言规范中的 switch 语句中,一个鲜为人知的事实是

case与语句关联的每个常量表达式都switch必须可分配(第 5.2 节)到switch表达式的类型。

例如,以下(有效,令人惊讶)代码打印49

int a = '1';
System.out.println(a);

所以 thecase constant和 theswitch(expression)不需要是相同的类型,这不会对原始类型产生编译错误。您可以通过使用解决此问题

switch(menuSelect) {
    case 1:
    ...
    case 2:
    ...
}

您还可以阅读 a charin 而不是 a int,并保持原样。但是 Scanner 没有nextChar()方法,所以你必须使用nextByte()并转换它。

char menuSelect = (char) keyboardIn.nextByte()
于 2013-02-28T17:28:30.760 回答
8

您正在获取一个int值,然后将其与一个char值进行比较。语句中的charswitch被提升为相应的int.

所以实际上,如果您输入 49('1' 的 Unicode 值),它将打印“请输入存款金额”等。

只是改变

case '1':

case 1:

等等

于 2013-02-28T17:28:59.197 回答
4

menuSelectis an intwhile '1'is a charwhich,一旦转换为intis 49...只需删除引号,它应该可以按预期工作。

于 2013-02-28T17:28:52.500 回答
0

您将输入作为 int 类型提取,但在您的情况下使用字符串参数。

将您的案例更改为:

case 1:
    // do something
    break;
case 2:
    // do something
    break;
//etc..
于 2013-02-28T17:30:50.530 回答