Java:变量未初始化
我收到一个“变量Java:变量未初始化,java,Java,我收到一个“变量选择”可能没有在显示菜单(选择)中初始化。我不知道为什么。它没有在显示菜单模型中初始化,还是我缺少了什么?“选择=键盘。nextInt“不算作初始化吗?我有点困惑为什么我会犯这个错误。代码如下: import java.util.Scanner; import java.io.*; public class LanguageTranslatorIB { public static void main(String[] args) { // local varia
选择”
可能没有在显示菜单(选择)
中初始化。我不知道为什么。它没有在显示菜单
模型中初始化,还是我缺少了什么?“选择=键盘。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();
}
}
}
import java.util.Scanner;
导入java.io.*;
公共类语言TranslatorIB
{
公共静态void main(字符串[]args)
{
//用于保存菜单选择的局部变量
int选择;
做
{
//显示菜单
显示菜单(选择);
//执行所选操作
开关(选择)
{
案例1:
System.out.println(“早上好”);
案例2:
System.out.println(“Buongiorno”);
案例3:
System.out.println(“布宜诺斯艾利斯迪亚斯”);
案例4:
System.out.println(“Guten morgen”);
案例5:
System.out.println(“再见!”);
}
}
while(选择!=5);
}
//displayMenu模块显示菜单并获取和验证
//用户选择。
公共静态无效显示菜单(整数选择)
{
//键盘扫描器
扫描仪键盘=新扫描仪(System.in);
//显示菜单
System.out.println(“选择一种语言,我会说早上好”);
System.out.println(“1.English”);
System.out.println(“2.意大利语”);
System.out.println(“3.西班牙语”);
System.out.println(“4.德语”);
System.out.println(“5.结束程序”);
System.out.println(“输入您的选择”);
//用户选择
选择=键盘.nextInt();
while(选择<1 | |选择>5)
{
System.out.println(“这是一个无效的选择。”);
System.out.println(“输入1、2、3、4或5”);
选择=键盘.nextInt();
}
}
}
更改显示菜单
不获取参数,而是返回所选整数。将其分配给所选内容:
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;
}
publicstaticintdisplaymenu()
{
整数选择=0;
扫描仪键盘=新扫描仪(System.in);
// ....
选择=键盘.nextInt();
while(选择<1 | |选择>5)
{
//...
}
返回选择;
}
将变量选择
传递到显示菜单
时,原始变量不会改变。在该方法中更改的变量是一个副本。您在该方法中所做的任何操作都绝对不会影响原始的选择
因此,选择
没有按照编译器正确指出的那样初始化
您需要重新设计显示菜单
,以返回将分配给选择
的值。该方法不需要任何输入
另一方面,您可能希望在
case
语句中的每个System.out.println
之后添加break
。如果您不这样做,那么控件将转到下一种情况。您的原语变量将作为副本而不是引用传递给方法。所以当你打电话的时候
显示菜单(选择)代码>
此方法只处理方法内的副本,而不处理方法外的变量。在Java中,局部/块变量需要在声明时显式初始化。未初始化的局部变量会导致此错误。如果您假设selection局部变量将被赋予int在Java中的默认值,那么您就错了。类级变量的情况不同,这些变量是在类中定义为属性的。这些变量由编译器自动指定其默认值
由于在以后的中使用之前没有为“selection”指定任何值,因此会出现此错误。在主方法中,selection
在任何点都不存储任何值。当您调用displayMenu(selection)时,需要设置displayMenu
以将整数返回到选择
代码>java将选择变量的值传递给displayMenu()方法。变量尚未初始化
然后尝试在displayMenu()方法内设置选择变量的值
但是,作为displayMenu()参数的选择变量是该方法的局部变量,即使设置了局部选择变量的值,主方法中的选择变量仍保持未初始化状态
要解决这个问题:创建一个实例变量
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();
}
}
}
公共类语言translatorIB
{
int选择;
公共静态void main(字符串[]args)
{
显示菜单();
//代码的其余部分如下;
}
}
公共静态无效显示菜单()
{
//键盘扫描器
扫描仪键盘=新扫描仪(System.in);
//显示菜单
System.out.println(“选择一种语言,我会说早上好”);
System.out.println(“1.English”);
System.out.println(“2.意大利语”);
System.out.println(“3.西班牙语”);
System.out.println(“4.德语”);
System.out.println(“5.结束程序”);
System.out.println(“输入您的选择”);
//用户选择
选择=键盘.nextInt();
while(选择<1 | |选择>5)
{
System.out.println(“这是一个无效的选择。”);
System.out.println(“输入1、2、3、4或5。”);
选择=键盘.nextInt();
}
}
}
您需要将其设置为一个值,如0。整数选择=0;将清除编译器错误。或者您可以稍后进行设置。更改displayMenu
不获取参数,而是返回选定的int。将其分配给选择:selection=displayMenu()代码>在您要求之前,您如何显示/使用节(值/变量)?哦,天哪。因为displayMenu()
是无效的,所以您不能