Java 在switch语句中找不到构造的值

Java 在switch语句中找不到构造的值,java,Java,在上面的代码中,switch(iCount)语句位于switch(iSelection)的案例1中,它使用构造函数创建一个advice。在switch(iSelection)的案例2中找到的switch(iCount)中,我需要显示引用a1的Advise的名称。当我这样做时,找不到a1。只有在输入了案例1中的所有内容后才能运行案例2,因此已经定义了a1。如何对其进行编码(使用相对基本的策略),以便显示a1中要显示的名称?我是一个比较新的编码,任何输入将非常感谢。谢谢您的时间。在更高的范围内(比如

在上面的代码中,switch(iCount)语句位于switch(iSelection)的案例1中,它使用构造函数创建一个advice。在switch(iSelection)的案例2中找到的switch(iCount)中,我需要显示引用a1的Advise的名称。当我这样做时,找不到a1。只有在输入了案例1中的所有内容后才能运行案例2,因此已经定义了a1。如何对其进行编码(使用相对基本的策略),以便显示a1中要显示的名称?我是一个比较新的编码,任何输入将非常感谢。谢谢您的时间。

在更高的范围内(比如在类范围内)声明Advise变量。这将使它们可以在更广泛的代码区域访问

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) {
                // ..
            }

// ...