有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从数组返回类类型的java

在我的getTopStudent方法中,这里有一个类叫做教室,它表示我的变量“topStudent”尚未初始化,我缺少了什么?,在我的AP java课程的视频中,并非所有内容都有解释

public class Classroom
{
    Student[] students;
    int numStudentsAdded;

    public Classroom(int numStudents)
    {
        students = new Student[numStudents];
        numStudentsAdded = 0;
    }

    public Student getTopStudent()
    {
        Student topStudent;
        for(int i = 1; i < students.length; i++)
        {

            if(students[i].getAverageScore() > students[i - 1].getAverageScore())
            {
                topStudent = students[i];
            }
            else
            {
                topStudent = students[i - 1];
            }

        }
        return topStudent;
    }

    public void addStudent(Student s)
    {
        students[numStudentsAdded] = s;
        numStudentsAdded++;
    }

    public void printStudents()
    {
        for(int i = 0; i < numStudentsAdded; i++)
        {
            System.out.println(students[i]);
        }
    }
}

我的学生班都在上课,应该没什么问题,不要认为需要解决这个问题

测试人员:

public class ClassroomTester extends ConsoleProgram
{
    public void run()
    {
        Classroom c = new Classroom(2);

        Student ada = new Student("Ada", "Lovelace", 12);
        ada.addExamScore(44);
        ada.addExamScore(65);
        ada.addExamScore(77);

        Student alan = new Student("Alan", "Turing", 11);
        alan.addExamScore(38);
        alan.addExamScore(24);
        alan.addExamScore(31);

        // add students to classroom
        c.addStudent(ada);
        c.addStudent(alan);
        c.printStudents();

        Student topStudent = c.getTopStudent();
        System.out.println(topStudent);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    它应该抱怨,因为如果getTopStudent()中的for循环从未运行,topStudent将保持未初始化状态。使用Student topStudent = null

  2. # 2 楼答案

    您可以假设学生数大于1,但编译器检测到学生数为0时,学生对象可能未初始化。因此,您编写的代码应该确保涵盖所有流

    您可能应该有这样的代码

    public class Classroom
    {
        Student[] students;
        int numStudentsAdded;
    
        public Classroom(int numStudents)
        {
            students = new Student[numStudents];
            numStudentsAdded = 0;
        }
    
        public Student getTopStudent()
        {
           if(students == null|| students.lenght ==0){
                   return null;
            }          
            Student topStudent;
            for(int i = 1; i < students.length; i++)
            {
    
                if(students[i].getAverageScore() > students[i - 1].getAverageScore())
                {
                    topStudent = students[i];
                }
                else
                {
                    topStudent = students[i - 1];
                }
    
            }
            return topStudent;
    }