Java:变量未初始化

时间:2014-05-03 18:26:05

标签: java

我收到的{"变量selection可能尚未在displayMenu(selection)中初始化。我不知道为什么。是不是在displayMenu模型中初始化了还是我错过了什么? " selection = keyboard.nextInt"不算作初始化?我有点困惑为什么我得到这个错误。这是代码:

import java.util.Scanner;
import java.io.*;

public class LanguageTranslatorIB
{
    public static void main(String[] args)
    {
// local variable to hold the menu selection
int selection;

do
{

    // display the menu
    displayMenu(selection);

    // perform the selected operation
        switch (selection)
        {
        case 1:
        System.out.println("Good Morning.");

        case 2:
        System.out.println("Buongiorno.");

        case 3:
        System.out.println("Buenos dias.");

        case 4:
        System.out.println("Guten morgen.");

        case 5:
        System.out.println("GoodBye!");

        }
    }
        while (selection != 5);
    }





// the displayMenu module displays the menu and gets and validates
// the users selection.

    public static void displayMenu(int selection)
    {
        //keyboard scanner
        Scanner keyboard = new Scanner(System.in);

    // display the menu
    System.out.println(" select a language and i will say good morning");
    System.out.println("1. English.");
    System.out.println("2. Italian.");
    System.out.println("3. Spanish.");
    System.out.println("4. German.");
    System.out.println("5. End the Program.");
    System.out.println("Enter your selection");

    // users selection
    selection = keyboard.nextInt();

    while (selection < 1 || selection > 5)
    {
        System.out.println ("that is an invalid select.");
        System.out.println (" Enter 1, 2, 3, 4, or 5.");
        selection = keyboard.nextInt();
    }

    }
}

6 个答案:

答案 0 :(得分:2)

将变量selection传递给displayMenu时,原始变量不会更改。在该方法中更改的变量是副本。你在该方法中所做的任何事情都对原始selection

完全没有影响

因此selection尚未初始化,正如编译器

正确指出的那样

您需要重新设计displayMenu以返回将分配给selection的值。不需要输入该方法

另一方面,您可能希望在break语句中的每个System.out.println之后添加case。如果你没有控制权,那么每个下一个案例都将落实。

答案 1 :(得分:1)

更改displayMenu不接受参数,而是返回选定的int。将其分配给选择:

selection = displayMenu();

和...

public static int displayMenu()
{
   int selection = 0;
   Scanner keyboard = new Scanner(System.in);
   // ....

   selection = keyboard.nextInt();

   while (selection < 1 || selection > 5)
   {
      //...
   }
   return selection;

}

答案 2 :(得分:0)

您的原始变量作为副本传递给方法,而不是引用。所以当你打电话时

displayMenu(selection);

此方法仅适用于方法中的副本,而不是变量本身。

答案 3 :(得分:0)

Java本地/块变量中的

需要在声明时显式初始化。未初始化的局部变量会产生此错误。如果你假设选择局部变量将被赋予一个int在Java中的默认值,那么你就错了。类级变量也是如此,您在类中定义为属性。这些变量由编译器自动分配其默认值。

由于您尚未将任何值分配给&#39;选择&#39;在稍后使用之前,你会收到此错误。

答案 4 :(得分:0)

在您的主要方法中,selection不会在任何时候存储任何值。您需要设置displayMenu以将整数返回到selection

答案 5 :(得分:0)

当您调用displayMenu(selection);时,java会将选择变量的值传递给displayMenu()方法。该变量尚未初始化。

然后你试图在displayMenu()方法中设置选择变量的值。

但是,作为displayMenu()参数的选择变量是该方法的局部变量,即使设置了局部选择变量的值,main方法中的选择变量仍然保持未初始化状态。

解决这个问题:创建一个实例变量。

public class LanguageTranslatorIB
{
    int selection;
    public static void main(String[] args)
    {
        displayMenu();
        //Rest of the code follows;
    }
}


public static void displayMenu()
{
    //keyboard scanner
    Scanner keyboard = new Scanner(System.in);

    // display the menu
    System.out.println(" select a language and i will say good morning");
    System.out.println("1. English.");
    System.out.println("2. Italian.");
    System.out.println("3. Spanish.");
    System.out.println("4. German.");
    System.out.println("5. End the Program.");
    System.out.println("Enter your selection");

    // users selection
    selection = keyboard.nextInt();

    while (selection < 1 || selection > 5)
    {
        System.out.println ("that is an invalid select.");
        System.out.println (" Enter 1, 2, 3, 4, or 5.");
        selection = keyboard.nextInt();
    }

    }
}