变量可能尚未初始化

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);
 }