变量可能尚未初始化
variable might not have been initialised
我是学习 Java 编程的相对较新的学生,但我想寻求一些帮助。我在代码中收到的错误是 "variable romanNumeral might not have been initialised."
此程序的目的是让用户输入 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;
}
}
在你的 switch case 中使用 default
。在 java 中,您必须在使用变量之前对其进行初始化。在您的代码中,如果有一个值没有大小写匹配,那么该变量将不会被初始化。
在您的 switch 语句中添加一个 default
案例,将其设置为某个错误值。您收到该警告是因为您的开关可能匹配 none 并且 romanNumeral 在返回之前永远不会设置。
String romanNumeral
引用内存位置,但不 初始化 它(不给它一个值)。因为您可以提供 usernum
的值而不会导致为 romanNumeral
设置值,所以您会收到错误。
为避免这种情况,您可以添加默认值案例.
考虑如果 userNum
的值为 40,代码将如何运行。switch
语句没有匹配该值的 case
,因此它会没有什么。这就是编译器所抱怨的:变量 romanNumeral
在声明时未初始化,并且 可能 甚至在 switch
之后 - 因此:"variable romanNumeral might not have been initialised."
两个简单的修复:(A) 在声明时初始化,例如String romanNumeral = "?"
,或 (B) 添加默认部分到 switch
,如:
switch(userNum)
{
// other cases first
default: romanNumeral = "?";
}
在Java中,某些方法中定义的变量不会自动初始化。
在这里你有两个选择:
1.使用初始化
字符串 romanNumeral = null(或其他);
2.在switch中使用default
默认:
romanNumeral = null(或其他东西);
该错误仅表示该变量仍未分配内存。所以,你要做的就是给它一个初始的 value.This 来消除错误:
String romanNumeral = "";
初始化变量、对象实例或您使用的任何数据结构很重要。有时它会给出空错误,但有时它甚至不会给出错误并且可能会给出错误的值。
上面已经回答了你的问题,但我想建议修改。按照这个table,你可以制作一个罗马数字的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
使用散列图,您可以计算特定 integer.Check 代码的罗马数字只是为了给您一个开始的想法:
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);
}
我是学习 Java 编程的相对较新的学生,但我想寻求一些帮助。我在代码中收到的错误是 "variable romanNumeral might not have been initialised."
此程序的目的是让用户输入 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;
}
}
在你的 switch case 中使用 default
。在 java 中,您必须在使用变量之前对其进行初始化。在您的代码中,如果有一个值没有大小写匹配,那么该变量将不会被初始化。
在您的 switch 语句中添加一个 default
案例,将其设置为某个错误值。您收到该警告是因为您的开关可能匹配 none 并且 romanNumeral 在返回之前永远不会设置。
String romanNumeral
引用内存位置,但不 初始化 它(不给它一个值)。因为您可以提供 usernum
的值而不会导致为 romanNumeral
设置值,所以您会收到错误。
为避免这种情况,您可以添加默认值案例.
考虑如果 userNum
的值为 40,代码将如何运行。switch
语句没有匹配该值的 case
,因此它会没有什么。这就是编译器所抱怨的:变量 romanNumeral
在声明时未初始化,并且 可能 甚至在 switch
之后 - 因此:"variable romanNumeral might not have been initialised."
两个简单的修复:(A) 在声明时初始化,例如String romanNumeral = "?"
,或 (B) 添加默认部分到 switch
,如:
switch(userNum)
{
// other cases first
default: romanNumeral = "?";
}
在Java中,某些方法中定义的变量不会自动初始化。 在这里你有两个选择: 1.使用初始化 字符串 romanNumeral = null(或其他); 2.在switch中使用default 默认: romanNumeral = null(或其他东西);
该错误仅表示该变量仍未分配内存。所以,你要做的就是给它一个初始的 value.This 来消除错误:
String romanNumeral = "";
初始化变量、对象实例或您使用的任何数据结构很重要。有时它会给出空错误,但有时它甚至不会给出错误并且可能会给出错误的值。
上面已经回答了你的问题,但我想建议修改。按照这个table,你可以制作一个罗马数字的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
使用散列图,您可以计算特定 integer.Check 代码的罗马数字只是为了给您一个开始的想法:
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);
}