gpt4 book ai didi

java - Switch 语句导致 java :240 (might not have been initialized)

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

我试图根据输入在变量中存储一个值:

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 p>

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

当我稍后在程序中尝试打印该值“因为它可能尚未初始化”时,问题就出现了,这在某种程度上是有道理的。 (下面的例子)

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

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

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

最佳答案

问题可能是 switch 语句不保证为 topping1 设置值。如果您收到“L”响应,您既不会将其设置为 1 也不会设置为 0。您应该在初始化 topping1 时设置默认值或在 default 子句中设置 1。

Java 编译器无法分析您的代码,从而知道在设置之前您不会让人们退出循环(我认为这是在循环中)。它只能表明代码中存在一条不允许设置它的路径。

这有效(对于 switch 也是如此):

int a;
if (condition()) {
a=0;
} else {
a=1;
}
System.out.println(a);

这有效:

int a=1;
if (condition()) {
a=0;
}
System.out.println(a);

这不会:

int a;
if (condition()) {
a=0;
}
System.out.println(a); // compiler error!

因为如果 condition() 返回 false,则 a 未定义。必须定义局部变量。请注意,这与类上的字段不同,类上的字段会自动分配默认值 null、0 或 false。

关于java - Switch 语句导致 java :240 (might not have been initialized),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15147639/

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