我收到的{"变量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();
}
}
}
答案 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)
需要在声明时显式初始化。未初始化的局部变量会产生此错误。如果你假设选择局部变量将被赋予一个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();
}
}
}