我的代码是在罗马等值中转换一些整数。假设整数5等于罗马字母“ V”,依此类推。我正在使用开关盒进行转换。但是它抛出一个错误,即变量符号是字符串类型的变量,这是未定义的。我在代码顶部声明了此变量。
转换表如下:
Symbol Value
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
import java.util.Scanner;
//Integer to Roman Conversion
public class integer_roman {
public static void main(String args[]){
Scanner in= new Scanner(System.in);
System.out.println("Enter the Integer number");
int number= in.nextInt();
String symbol;
switch (number){
case 1:
symbol="I";
break;
case 5:
symbol="V";
break;
case 10:
symbol="X";
break;
case 50:
symbol="L";
break;
case 100:
symbol="C";
break;
case 500:
symbol="D";
break;
case 1000:
symbol="M";
break;
}
System.out.println(symbol);
}
}
错误:错误:(34,28)java:变量符号可能尚未初始化
我无法找出问题所在。如果有人有任何想法,请分享。
答案 0 :(得分:1)
首先将消息打印给用户,然后使用Scanner
获得他的输入。
第二个添加default:
的地方,您将在初始化symbol
的情况下,以防用户输入了除切换语句中定义的大小写以外的其他内容。
public static void main(String args[]){
System.out.println("Enter the Integer number");
Scanner in= new Scanner(System.in);
int number= in.nextInt();
String symbol = null;
switch (number){
case 1:
symbol="I";
break;
case 5:
symbol="V";
break;
case 10:
symbol="X";
break;
case 50:
symbol="L";
break;
case 100:
symbol="C";
break;
case 500:
symbol="D";
break;
case 1000:
symbol="M";
break;
default:
symbol="Uknown number."
}
System.out.println(symbol);
}
答案 1 :(得分:1)
此:
String symbol;
是变量symbol
的声明,但不执行任何初始化。
后来,switch
块并没有覆盖变量number
可能具有的所有可能值,因此,即使symbol
块之后,switch
仍会保持未初始化状态。
这就是编译器抱怨的原因,因为未初始化的变量不可能在赋值的右侧打印或使用。
最好以这种方式在一开始对其进行初始化:
String symbol = "undefined";
因此,如果switch
块中的symbol
没有得到任何值,将打印undefined
。
答案 2 :(得分:-1)
感谢您的有益讨论。关于定义在其中我为null的字符串的理论有很多。
String symbol=null;
效果很好。我不知道变量可以使用未定义或null值来定义。所以我很困惑。但是没有必要对此帖子进行降级。我写下了整个代码。只能停留在一点上。