1

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

7 回答 7

3

userNum考虑一下如果值为 40时代码将如何表现。该switch语句没有case与这样的值匹配的 a,因此它什么也不做。这就是编译器所抱怨的:变量romanNumeral在声明时未初始化,甚至可能switch- 因此之后:“变量 romanNumeral 可能尚未初始化。”

两个简单的修复:(A)在声明时初始化,例如String romanNumeral = "?",或(B)向 中添加一个默认部分switch,如:

switch(userNum)
{
    // other cases first

    default: romanNumeral = "?";
}
于 2016-04-02T06:45:36.327 回答
2

default在您的开关盒中使用。在java中,你必须在使用它之前初始化一个变量。在您的代码中,如果存在大小写不匹配的值,则不会初始化该变量。

于 2016-04-02T06:37:36.283 回答
2

default在您的 switch 语句中添加一个案例,将其设置为某个错误值。您收到该警告是因为您的开关可能与任何一个都不匹配,并且 romanNumeral 在返回之前永远不会被设置。

于 2016-04-02T06:37:44.820 回答
1

在 Java 中,某些方法中定义的变量不会自动初始化。在这里你有两个选择: 1. 使用 String romanNumeral = null (或其他东西)初始化它;2.在switch default中使用default: romanNumeral = null (or something);

于 2016-04-02T06:46:10.380 回答
1

初始化变量、对象实例或您使用的任何数据结构非常重要。有时它会给出空错误,但有时它甚至不会给出错误并且可能会给出错误的值。

您的问题已在上面得到解答,但我想提出修改建议。按照此表,您可以制作罗马数字的 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

使用哈希图,您可以计算特定整数的罗马数字。检查代码只是为了给您一个开始的想法:

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);
 }
于 2016-04-03T02:10:21.663 回答
1

String romanNumeral引用内存位置,但不初始化它(不给它一个值)。因为您可以提供一个usernum不会导致为 设置值的值romanNumeral,所以您会收到错误消息。
为避免这种情况,您可以添加默认情况。

于 2016-04-02T06:38:45.323 回答
1

该错误只是意味着该变量仍然没有分配内存。因此,您要消除错误只需给它一个初始值。这将执行以下操作:

String romanNumeral = "";

于 2016-04-02T06:55:27.813 回答