变量可能尚未初始化

时间:2016-04-02 06:34:27

标签: java compiler-errors variable-initialization

我是一名学习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;
    }
}

7 个答案:

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