gpt4 book ai didi

Java switch/case 在 case 之后变为默认值

转载 作者:行者123 更新时间:2023-12-01 12:25:30 24 4
gpt4 key购买 nike

我正在尝试做类作业,并且正在使用 switch case 来制作命令行界面,但我正在使用的部分有问题。当我执行 addCard 命令时,它运行良好,但随后进入默认部分。当我尝试使用任何其他部分,或者在没有 try 段的情况下使用它时,它可以工作并且不会进入默认状态。关于如何修复这个有什么想法吗?代码如下

public static void cmdLine(String Cmd) {
switch(Cmd) {

case "Help":
case "?":
System.out.println("Available Commands:\naddCard = Add a card!\ndeleteCard = Delete a Card!\nfindCard = Locate Card Number by Name!\nCard (Card Number) = Work with your card");
break;
case "addCard" :
System.out.println ("Enter Account Name:");
String cName = scan.nextLine();
try {
System.out.println ("Enter Account Start Balance:");
int cBal = scan.nextInt();
System.out.println ("Enter Account Number:");
int cNum = scan.nextInt();
PPArray.addCard(cName, cBal,cNum);
} catch (InputMismatchException nfe) {
System.out.println("InputMismatchException: Please try again with only the card number. (Ex. 12345");
break;
}
break;
case "deleteCard" :
System.out.println("here we will have a command to remove the card from the array");
break;
case "Card" :
System.out.println("This will lead to a new function to operate with said card");
break;
case "Exit":
case "exit":
case "Quit":
case "quit":
return;
default :
System.out.println("Invalid Command ('?' or 'Help' for commands)");
System.out.println(PPArray.cardArray[1].name);
}
cmdLine(scan.nextLine());
}

最佳答案

当您运行“addCard”中的 try block 时,您将获得 int cNum = scan.nextInt(); 输入。然后,当您在 switch 语句后调用 cmdLine(scan.nextLine()); 时,它会消耗新行,从而导致调用 default 子句。

您可以通过在 try block 末尾添加 scan.nextLine() 来防止这种情况。

    case "addCard" :
System.out.println ("Enter Account Name:");
String cName = scan.nextLine();
try {
System.out.println ("Enter Account Start Balance:");
int cBal = scan.nextInt();
System.out.println ("Enter Account Number:");
int cNum = scan.nextInt();
PPArray.addCard(cName, cBal,cNum);
scan.nextLine();
} catch (InputMismatchException nfe) {
System.out.println("InputMismatchException: Please try again with only the card number. (Ex. 12345");
break;
}
break;

顺便说一句,我认为递归调用 cmdLine(scan.nextLine()); 来处理下一个输入是错误的编码。我认为 while 循环更有意义。

关于Java switch/case 在 case 之后变为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26374743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com