Переменная Java не определена, но она определена в начале - PullRequest
0 голосов
/ 20 ноября 2018

Мой код для преобразования целого числа в римский эквивалент. Скажем, целое число 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 голосов
/ 20 ноября 2018

Это:

String symbol;

является объявлением переменной symbol, но не выполняет инициализацию.
Позже блок switch не охватывает все возможные значения, которые может иметь переменная number, поэтому есть случай, когда symbol останется неинициализированным даже после блока switch.
Вот почему компилятор жалуется, потому что неинициализированная переменная не может быть напечатана или использована справа от присваивания.
Лучше инициализировать его в начале так:

String symbol = "undefined";

, поэтому, если в блоке switch symbol не получено никакого значения, будет напечатано undefined.

0 голосов
/ 20 ноября 2018

Спасибо за это полезное обсуждение. Существует так много теорий об определении строки, в которой меня принимают за ноль.

String symbol=null;

Работает хорошо. Я не знаю, переменную можно определить с неопределенными или нулевыми значениями. Так что я в замешательстве. Но нет необходимости понижать этот пост. Я записываю целый код. Только застрял в одной точке.

0 голосов
/ 20 ноября 2018

Сначала напечатайте сообщение пользователю, а затем получите его ввод с помощью Scanner.

Во-вторых, добавьте default:, где вы инициализируете symbol в случае, если пользователь набрал что-то еще, кроме определенных случаев в операторе switch.

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