对象数组混淆

时间:2014-03-08 22:31:25

标签: java arrays

程序首先提示:

  1. 创建新的学生列表
  2. 搜索学生
  3. 出口
  4. 问题:在第二个if语句中,oClassList未初始化。如何在第二个中的lastName的第一个if语句中搜索实例化的对象数组?

        int z = 0;
    
        while(run) {
    
            if(z == 0) {
                System.out.println("Please choose an option.  (Enter 1, 2, or 3)\n");
            }
            else {
                System.out.println();
                System.out.println("Would you like to continue?  If so, please choose an option.\n");
            }
    
            System.out.println("1. New Class List");
            System.out.println("2. Search for a Student");
            System.out.println("3. Exit");
    
            iUserSelection = oScan.nextInt();
    
    
            Student[] oClassList;
    
            // creates new class list
            if(iUserSelection == 1) {
    
                System.out.println();
    
                System.out.println("How many students?");
                x = oScan.nextInt();
    
                System.out.println();
    
    
                // flush the buffer
                oScan.nextLine();
    
                oClassList = new Student[x];
    
                for(int i = 0; i < x; i++) {
                    System.out.println("*********************");
                    System.out.println("Student " + (i + 1) + " of " + x);
                    System.out.println("*********************");
    
    
                    oClassList[i] = new Student("","",0,0,0,0);
    
    
                    System.out.print("First Name: ");
                    oClassList[i].setFirstName(oScan.nextLine());
    
                    System.out.print("Last Name: ");
                    oClassList[i].setLastName(oScan.nextLine());
    
                    System.out.print("Homework average: ");
                    oClassList[i].setHWAve(oScan.nextInt());
    
                    System.out.print("Quiz average: ");
                    oClassList[i].setQuizAve(oScan.nextInt());
    
                    System.out.print("Project average: ");
                    oClassList[i].setProjectAve(oScan.nextInt());
    
                    System.out.print("Test average: ");
                    oClassList[i].setTestAve(oScan.nextInt());
    
    
    
                    // flush the buffer
                    oScan.nextLine();
    
                    System.out.println();
    
    
    
                    oClassList[i].printStudent();
                }
            }
    
            if(iUserSelection == 2) {
                // flush the buffer
                oScan.nextLine();
    
                    System.out.println("Student search");
    
                    System.out.print("Enter last name: ");
                    sSearchLastName = oScan.nextLine();
    
                    System.out.print("Enter first name: ");
                    sSearchFirstName = oScan.nextLine();
    
                    for(int y = 0; y >= oClassList.length; y++) {
                        if(sSearchLastName == oClassList[y].lastName) {
                            System.out.println("found elements");
                        }
                        else
                            System.out.println("Error - Student not found");
                    }
    
    
    
            }
    
            if(iUserSelection == 3) {
                run = false;
    
                System.out.println();
                System.out.println("Goodbye.");
            }
    
    
    
    
    
            z++;
        }
    

1 个答案:

答案 0 :(得分:1)

您的变量Student[] oClassList;是一个局部变量,嵌套在while循环中。每次程序离开while范围时,这都会导致重置oClassList(因此每个while处理都有自己的类列表。)

您可以将该变量声明移到while循环之上 - 该变量的范围将跨越整个程序。

所以,只需将Student[] oClassList;直接移到int z = 0;下方即可,一切正常。


修改

范围不是一切,您还必须初始化变量。空检查(如另一个答案中所述)也不是一个坏主意。

int z = 0;

Student[] oClassList = null;


while(run) {

    if(z == 0) {
        System.out.println("Please choose an option.  (Enter 1, 2, or 3)\n");
    }
    else {
        System.out.println();
        System.out.println("Would you like to continue?  If so, please choose an option.\n");
    }

    System.out.println("1. New Class List");
    System.out.println("2. Search for a Student");
    System.out.println("3. Exit");

    iUserSelection = oScan.nextInt();


    // creates new class list
    if(iUserSelection == 1) {

        System.out.println();

        System.out.println("How many students?");
        x = oScan.nextInt();

        System.out.println();


        // flush the buffer
        oScan.nextLine();

        oClassList = new Student[x];

        for(int i = 0; i < x; i++) {
            System.out.println("*********************");
            System.out.println("Student " + (i + 1) + " of " + x);
            System.out.println("*********************");


            oClassList[i] = new Student("","",0,0,0,0);


            System.out.print("First Name: ");
            oClassList[i].setFirstName(oScan.nextLine());

            System.out.print("Last Name: ");
            oClassList[i].setLastName(oScan.nextLine());

            System.out.print("Homework average: ");
            oClassList[i].setHWAve(oScan.nextInt());

            System.out.print("Quiz average: ");
            oClassList[i].setQuizAve(oScan.nextInt());

            System.out.print("Project average: ");
            oClassList[i].setProjectAve(oScan.nextInt());

            System.out.print("Test average: ");
            oClassList[i].setTestAve(oScan.nextInt());



            // flush the buffer
            oScan.nextLine();

            System.out.println();



            oClassList[i].printStudent();
        }
    }

    if(iUserSelection == 2) {
        // flush the buffer
        oScan.nextLine();

            System.out.println("Student search");

            if (oClassList == null) {
                System.out.println("No class list defined yet");
            } else {

                System.out.print("Enter last name: ");
                sSearchLastName = oScan.nextLine();

                System.out.print("Enter first name: ");
                sSearchFirstName = oScan.nextLine();

                for(int y = 0; y >= oClassList.length; y++) {
                    if(sSearchLastName == oClassList[y].lastName) {
                        System.out.println("found elements");
                    }
                    else
                        System.out.println("Error - Student not found");
                }
            }



    }

    if(iUserSelection == 3) {
        run = false;

        System.out.println();
        System.out.println("Goodbye.");
    }





    z++;
}