Java 在switch语句中找不到构造的值
在上面的代码中,switch(iCount)语句位于switch(iSelection)的案例1中,它使用构造函数创建一个advice。在switch(iSelection)的案例2中找到的switch(iCount)中,我需要显示引用a1的Advise的名称。当我这样做时,找不到a1。只有在输入了案例1中的所有内容后才能运行案例2,因此已经定义了a1。如何对其进行编码(使用相对基本的策略),以便显示a1中要显示的名称?我是一个比较新的编码,任何输入将非常感谢。谢谢您的时间。在更高的范围内(比如在类范围内)声明Advise变量。这将使它们可以在更广泛的代码区域访问Java 在switch语句中找不到构造的值,java,Java,在上面的代码中,switch(iCount)语句位于switch(iSelection)的案例1中,它使用构造函数创建一个advice。在switch(iSelection)的案例2中找到的switch(iCount)中,我需要显示引用a1的Advise的名称。当我这样做时,找不到a1。只有在输入了案例1中的所有内容后才能运行案例2,因此已经定义了a1。如何对其进行编码(使用相对基本的策略),以便显示a1中要显示的名称?我是一个比较新的编码,任何输入将非常感谢。谢谢您的时间。在更高的范围内(比如
public static void main(String[] args)
{
//variables
String name = "";
String advisor;
String strSelection;
int iSelection;
String studentID;
String concentration;
String strHours;
int iHours = 0;
String strMajorSheet;
boolean majorSheet = false;
String strIntent; //holds JOptionPane input for intent to graduate
boolean intent = false; //intent to graduate
boolean blnReq = false; //requirements met
String classification; //holds classification of advisee
String strClear; //clear to graduate
boolean blnEmpty ; //empty?
blnEmpty = name.isEmpty(); //no advisee in system
String strUpdate; //catches option 2
int iCount = 0; //# of advisees entered
Advisee a1, a2, a3;
JOptionPane.showMessageDialog(null, " Welcome to the Advising Manager!\n--------Created by Mason Bailey and Zach Latture--------","Message",1);
advisor = JOptionPane.showInputDialog(null, "\tWhat is the advisor's name?", "Input", 3);
strSelection = JOptionPane.showInputDialog(null, "~~Please make a selection from the menu below~~" +
"\n\n\n1.Add a new advisee" +
"\n2.Update an advisee's information" +
"\n\n\n3.Display all advisees" +
"\n4.Display advisees who are cleared to graduate" +
"\n5.Exit:" +
"\n\n\n\n\nWhat is your selection", "Input", 3);
iSelection = Integer.parseInt(strSelection);
switch(iSelection)
{
case 1:
name = JOptionPane.showInputDialog(null, "Name: ", "Advisee",3);
studentID = JOptionPane.showInputDialog(null, "Student ID: ", "Advisee",3);
concentration = JOptionPane.showInputDialog(null, "Concentration: ", "Advisee",3);
strHours = JOptionPane.showInputDialog(null, "Hours Completed: ", "Advisee",3);
strMajorSheet = JOptionPane.showInputDialog(null, "Have you filed your major sheet? (True/False)", "Advisee",3);
if(strMajorSheet.equalsIgnoreCase("true"))
{
majorSheet = true;
} //end if
strIntent = JOptionPane.showInputDialog(null, "Do you intend to graduate? (True/False)", "Advisee",3);
if(strIntent.equalsIgnoreCase("true"))
{
intent = true;
} //end if
iCount++;
switch(iCount)
{
case 1:
a1 = new Advisee(name,studentID,concentration,iHours,advisor,majorSheet,intent);
break;
case 2:
a2 = new Advisee(name,studentID,concentration,iHours,advisor,majorSheet,intent);
break;
case 3:
a3 = new Advisee(name,studentID,concentration,iHours,advisor,majorSheet,intent);
break;
}
break;
case 2:
if(blnEmpty = true)
{
JOptionPane.showMessageDialog(null,"There are no advisees in the system yet");
} //end if
switch(iCount)
{
case 1:
strUpdate = JOptionPane.showInputDialog(null, "***Please select which advisee's information you need to update***" + a1.getName,"Input",3);
}//end switch
}//end switch
}//end main
然后在第一种情况下的switch(iCount)
语句中,只需将上述变量用作
class SomeClass {
Advisee a1, a2, a3;
很抱歉,我写这篇文章作为回答,但我没有足够的声誉来写评论
a1 = new Advisee(name,studentID,concentration,iHours,advisor,majorSheet,intent);
break;
case 2:
a2 = new Advisee(name,studentID,concentration,iHours,advisor,majorSheet,intent);
break;
case 3:
a3 = new Advisee(name,studentID,concentration,iHours,advisor,majorSheet,intent);
break;
请注意,如果(blnEmpty=true)
是一个赋值。这永远是真的!要检查某事是否属实,请使用==
。对于初学者来说,这是一个经常使用true==something
的提示,因为true=something
不会编译
这可能不是您问题中的主要问题,但仍然是一个大问题(它总是声称:系统中还没有通知。这会导致错误的结论)。在switch语句中声明Advise变量意味着它们只能在封闭的
{}
字符之间访问。在一个作用域(级别为{}
方括号)上声明变量,当您需要时可以在该作用域中访问这些变量。为了防止编译器(有效地)抱怨“uninitialized variable”,请在声明它们的位置使用null
初始化它们。(但我怀疑这段代码也有其他问题。)这会运行一次并终止,不是吗?因此,在不同的执行运行之间不会保留状态。你能告诉我们你想在这里实现什么吗?具体来说,您显示一个对话框,请求输入并处理它,程序终止。此处没有循环。您的Advise变量未初始化为null
,这意味着您以后将无法访问它们,因为您将收到“未初始化变量”错误。初始化它们--advice a1=null代码>。如果您遇到编译错误,请发布(准确引用!)并指出它所指的行。仅仅说“它不起作用”是不够的。变量不应该成为类作用域,除非它们打算成为对象持久状态的一部分。简单地将它们放在那里以方便不必为空是个坏主意。@HotLicks我将它们放在类范围内的想法并不是为了避免null
。无论如何,我可能不明白你说的话。它位于类范围内的原因是在不同的行为调用之间保持状态持久性——在两个不同的时间进行两个不同的开关调用。请把你的否决票倒过来,这样一个学习者就会问这个问题,他可能会误解我说的话。我之所以否决,是因为他是个新手,一遇到困难就诉诸课堂范围是一个学习的坏习惯。是的,我显然不擅长编码。但我是来学习的。我将它们全部设置为null,但是如何将更新变量的信息输入到第二个switch语句的第一个案例中?@user2909717您能将您所做的作为问题的更新发布吗?很好!我没有足够的注意力去关注其他人代码中的suss。
// ...
case 2:
if(blnEmpty = true) {
// ..
}
// ...