我试图根据输入内容将值存储在变量中:

switch(pepperoni) {

    case 'Y':
    case 'y':
        topping1 = 1;
        break;

    case 'N':
    case 'n':
        topping1 = 0;
        break;

    default:

        {
    System.out.print("This is not a valid response, please try again \n");
    System.out.print("Do you want Pepperoni? (Y/N): ");
    pepperoni = scan.next().charAt(0);
        break;
    }


我希望变量topping1如果输入为'Y'或'y'则存储值1,如果输入为'N'或'n'则存储值0

如果输入的内容既不是“ Y”,“ y”,“ N”也不是“ n”,那么我希望它重复该问题,直到输入有效的输入为止。

当我稍后在程序中尝试打印值“因为它可能尚未初始化”时,就会出现问题,这在一定程度上是合理的。 (下面的示例)

if(topping1 > 0)
    System.out.println("Pepperoni");

// 243: error: variable topping1 might not have been initialized


我确实知道还有其他方法可以做到这一点,但是由于我真的很想学习Java,所以我尝试尽可能多地了解基础知识。因此,如果有人可以告诉我为什么这行不通,以及是否有一种方法可以通过switch语句或快速修复来实现,我将非常高兴。

最佳答案

如果pepperoni不是YyNn,则永远不要为topping1分配值,因为default情况永远不会为其分配值。例如,如果pepperoni不是这四个值之一,则控制流将跳过其他两种情况,并转到default,它永远不会为topping1提供值,因此稍后尝试使用它时,它是可能topping1从未收到任何值。

“解决方法”是纠正逻辑,以便您在未分配topping1值的情况下不要尝试使用它。您如何执行此操作取决于您尚未向我们展示的逻辑。例如,您可以为其分配01以外的值(在switch的其他分支中分配的值)。

09-13 04:07