我是一名学习Java编程的相对较新的学生,但我想请求一些帮助。我在代码中收到的错误是声明“变量romanNumeral可能尚未初始化。”
此程序的目的是让用户输入1-39之间的数字,然后通过对话框向用户显示相应的罗马数字值。代码还没有完成,因为我还没有找到解决这个问题的方法,因为应用程序不让我编译代码。
以下是代码:
public class exercise4 extends Actor
{
int userNum;
public void act()
{
intInput(userNum);
}
public String intInput(int userNum)
{
String userInput;
String romanNumeral;
userInput = JOptionPane.showInputDialog("Please enter a number to be converted into Roman Numerals.");
userNum = Integer.parseInt(userInput);
switch(userNum)
{
case 1: romanNumeral = "I";
break;
case 2: romanNumeral = "II";
break;
case 3: romanNumeral = "III";
break;
case 4: romanNumeral = "IV";
break;
case 5: romanNumeral = "V";
break;
case 6: romanNumeral = "VI";
break;
case 7: romanNumeral = "VII";
break;
case 8: romanNumeral = "VIII";
break;
case 9: romanNumeral = "IX";
break;
case 10: romanNumeral = "X";
break;
case 11: romanNumeral = "XI";
break;
case 12: romanNumeral = "XII";
break;
case 13: romanNumeral = "XIII";
break;
case 14: romanNumeral = "XIV";
break;
case 15: romanNumeral = "XV";
break;
case 16: romanNumeral = "XVI";
break;
case 17: romanNumeral = "XVII";
break;
case 18: romanNumeral = "XVIII";
break;
case 19: romanNumeral = "XIX";
break;
case 20: romanNumeral = "XX";
break;
case 21: romanNumeral = "XXI";
break;
case 22: romanNumeral = "XXII";
break;
case 23: romanNumeral = "XXIII";
break;
case 24: romanNumeral = "XXIV";
break;
case 25: romanNumeral = "XXV";
break;
case 26: romanNumeral = "XXVI";
break;
case 27: romanNumeral = "XXVII";
break;
case 28: romanNumeral = "XXVIII";
break;
case 29: romanNumeral = "XXIX";
break;
case 30: romanNumeral = "XXX";
break;
case 31: romanNumeral = "XXXI";
break;
case 32: romanNumeral = "XXXII";
break;
case 33: romanNumeral = "XXXIII";
break;
case 34: romanNumeral = "XXXIV";
break;
case 35: romanNumeral = "XXXV";
break;
case 36: romanNumeral = "XXXVI";
break;
case 37: romanNumeral = "XXXVII";
break;
case 38: romanNumeral = "XXXVIII";
break;
case 39: romanNumeral = "XXXIX";
break;
}
return romanNumeral;
}
}
答案 0 :(得分:3)
如果userNum
的值为40,请考虑代码的行为。switch
语句没有匹配此类值的case
,所以它会这样做没有。这是编译器抱怨的内容:变量romanNumeral
在声明时未初始化,而可能在switch
之后不会 - 因此:& #34;变量romanNumeral可能尚未初始化。"
两个简单的修复:(A)在声明时初始化,例如: String romanNumeral = "?"
或(B)将默认部分添加到switch
,如下:
switch(userNum)
{
// other cases first
default: romanNumeral = "?";
}
答案 1 :(得分:2)
在您的交换机案例中使用default
。在java中,您必须在使用它之前初始化变量。在你的代码中,如果有一个没有大小写匹配的值,那么该变量将不会被初始化。
答案 2 :(得分:2)
在switch语句中添加default
大小写,将其设置为某个错误值。你收到了警告,因为你的交换机可能没有匹配,而且在返回之前,romanNumeral永远不会被设置。
答案 3 :(得分:1)
String romanNumeral
引用内存位置,但不初始化它(不给它一个值)。因为您可以提供usernum
的值而不会导致为romanNumeral
设置值,所以您会收到错误。
为了避免这种情况,您可以添加默认案例
答案 4 :(得分:1)
在Java中,某些方法中定义的变量不会自动初始化。 这里有两个选择: 1.使用初始化它 String romanNumeral = null(或其他); 2.在开关中使用默认值 默认: romanNumeral = null(或某事);
答案 5 :(得分:1)
错误只是意味着变量仍然没有分配内存。那么,你要做的就是删除错误就是给它一个初始值。这样做:
String romanNumeral = "";
答案 6 :(得分:1)
初始化变量,对象实例或您使用的任何数据结构非常重要。有时它会给出null错误,但有时它甚至不会给出错误并且可能给出错误的值。
您的问题已在上面得到解答,但我想建议进行修改。在此表之后,您可以创建罗马数字的HashMap:
Decimal value (v) Roman numeral (n)
1 I
4 IV
5 V
9 IX
10 X
40 XL
50 L
90 XC
100 C
400 CD
500 D
900 CM
1000 M
使用hashmap,您可以计算特定整数的罗马数。检查代码只是为了让您了解入门:
public static void main(String []args){
int c = 39;int temp =0;
String roman = "";
if(c<40 && C>10)
{
temp = c/10;
c = c%10;
for(int i=0;i<temp;i++)
{
roman = roman+map.get(10);
}
}
if(c<10 && c>5)
{
if(c==9)
{
roman = roman+map.get(9);
}else{
temp = c/5;
c = c%5;
if(temp==1)
roamn += map.get(5);
for(int i=0;i<c;i++)
{
roman = roman+map.get(1);
}
//again you will have to check a case for four the way I did for 9
}
}
}
System.out.println(roman);
}