变量可能尚未在java中初始化

时间:2013-03-24 04:45:38

标签: java exception-handling

import java.util.Scanner;
import java.util.InputMismatchException;
public class Demo
{
    public static void main(String [] agrs){
    Scanner keyBoard = new Scanner(System.in);
    int input;
    do{
        System.out.println("[ 1] Case 1.");
        System.out.println("[ 2] Case 2.");
        System.out.println("[ 3] Case 3.");
        System.out.println("[ 0] Case 0.");
        System.out.print("Your Choice: ");

        try{
            input = keyBoard.nextInt();
        }
        catch(InputMismatchException e){
            System.out.println("Error");
        }

        switch (input){
            default:
                  System.out.println("Default");
                  break;
            case 1:
                  System.out.println("One");
                  keyBoard.next();
                  break;
            case 2:
                  System.out.println("Two");
                  break;
            case 3:
                  System.out.println("Three");
                  break;
            case 0:
                  System.exit(0);
                  break;
        }
    }
    while(input != 0);
}

我想在控制台中制作一个菜单但是却出错了。 错误:可能尚未初始化变量输入。 我知道为什么我接受错误,但我不知道如何解决它。 我只知道一点英语,所以我希望mod编辑我的主题以适应更多 谢谢大家

7 个答案:

答案 0 :(得分:2)

这应该可以解决无限循环和无效输入以及编译器错误的问题:

import java.util.Scanner;
import java.util.InputMismatchException;

public class Demo {

    public static void main(String[] agrs) {

        Scanner keyBoard = new Scanner(System.in);
        // This fixes the compiler error!
        int input = -1;

        do {
            System.out.println("[ 1] Case 1.");
            System.out.println("[ 2] Case 2.");
            System.out.println("[ 3] Case 3.");
            System.out.println("[ 0] Case 0.");
            System.out.print("Your Choice: ");

            try {
                input = keyBoard.nextInt();
            } catch (InputMismatchException e) {
                // This fixes the endless loops on invalid inputs!
                System.out.println("Invalid input " + keyBoard.next());
                input = -1;
            }

            switch (input) {
                default:
                    System.out.println("Default");
                    break;
                case 1:
                    System.out.println("One");
                    keyBoard.next();
                    break;
                case 2:
                    System.out.println("Two");
                    break;
                case 3:
                    System.out.println("Three");
                    break;
                case 0:
                    System.exit(0);
                    break;
            }
        } while (input != 0);
    }
}

答案 1 :(得分:0)

在实际分配输入之前,可能会从'keyBoard.nextInt()'抛出异常。如果是这样,那么考虑下面的switch语句中会发生什么......或者更糟糕的是,你如何退出do-while循环。

答案 2 :(得分:0)

使用0或任何值初始化int输入。因为它在使用变量输入之前从用户获得输入。

int input=0;

它将解决您的问题。

答案 3 :(得分:0)

这应该解决它,

int input = 0;

答案 4 :(得分:0)

您必须在使用之前初始化变量..

int input;

您可以使用一些虚拟值初始化此变量:

int input = -1;

答案 5 :(得分:0)

您需要将输入变量初始化为某个默认值。它是一个局部变量,默认情况下不会初始化局部变量。因此,您需要为它们明确指定一些默认值。

检查出来:

        int input;
    do{
      // Some statements
        try {
            input = keyBoard.nextInt();
        } catch(InputMismatchException e) {
            System.out.println("Error");
        }
        // What if the above try-catch block is bypassed. In that case input will not have any value assigned to it. 
        // Hence, you get the error
        switch (input){

所以改变第一个语句如下:

int input = -1;

答案 6 :(得分:0)

我认为你可以将while和switch语句包含在try块