Java变量未定义,但在开始时定义

时间:2018-11-19 22:27:22

标签: java string switch-statement java.util.scanner

我的代码是在罗马等值中转换一些整数。假设整数5等于罗马字母“ V”,依此类推。我正在使用开关盒进行转换。但是它抛出一个错误,即变量符号是字符串类型的变量,这是未定义的。我在代码顶部声明了此变量。

转换表如下:

 Symbol       Value
  I             1
  V             5
  X             10
  L             50
  C             100
  D             500
  M             1000
import java.util.Scanner;

//Integer to Roman Conversion
public class integer_roman {
public static void main(String args[]){
    Scanner in= new Scanner(System.in);

    System.out.println("Enter the Integer number");
    int number= in.nextInt();
    String symbol;
    switch (number){
        case 1:
            symbol="I";
            break;
        case 5:
            symbol="V";
            break;
        case 10:
            symbol="X";
            break;
        case 50:
            symbol="L";
            break;
        case 100:
            symbol="C";
            break;
        case 500:
            symbol="D";
            break;
        case 1000:
            symbol="M";
            break;
    }
    System.out.println(symbol);
}
}

错误:错误:(34,28)java:变量符号可能尚未初始化

我无法找出问题所在。如果有人有任何想法,请分享。

3 个答案:

答案 0 :(得分:1)

首先将消息打印给用户,然后使用Scanner获得他的输入。

第二个添加default:的地方,您将在初始化symbol的情况下,以防用户输入了除切换语句中定义的大小写以外的其他内容。

public static void main(String args[]){
        System.out.println("Enter the Integer number");
        Scanner in= new Scanner(System.in);

        int number= in.nextInt();
        String symbol = null;
        switch (number){
            case 1:
                symbol="I";
                break;
            case 5:
                symbol="V";
                break;
            case 10:
                symbol="X";
                break;
            case 50:
                symbol="L";
                break;
            case 100:
                symbol="C";
                break;
            case 500:
                symbol="D";
                break;
            case 1000:
                symbol="M";
                break;
            default:
                symbol="Uknown number."
        }
        System.out.println(symbol);
    }

答案 1 :(得分:1)

此:

String symbol;

是变量symbol的声明,但不执行任何初始化。
后来,switch块并没有覆盖变量number可能具有的所有可能值,因此,即使symbol块之后,switch仍会保持未初始化状态。
这就是编译器抱怨的原因,因为未初始化的变量不可能在赋值的右侧打印或使用。
最好以这种方式在一开始对其进行初始化:

String symbol = "undefined";

因此,如果switch块中的symbol没有得到任何值,将打印undefined

答案 2 :(得分:-1)

感谢您的有益讨论。关于定义在其中我为null的字符串的理论有很多。

String symbol=null;

效果很好。我不知道变量可以使用未定义或null值来定义。所以我很困惑。但是没有必要对此帖子进行降级。我写下了整个代码。只能停留在一点上。