Java 构造函数未设置数组

Java 构造函数未设置数组,java,arrays,constructor,Java,Arrays,Constructor,我对Java比较陌生,目前正在夜校学习。我无法正确设置构造函数,以便它将输入的值移动到数组中。我有下面的代码,看起来各个字段都被正确地传递了,但是数组没有填充,我无法找出我做错了什么。我已经翻阅了我的笔记、课本,并在这里核对了一下。我可能只是盯着它看太久了 import java.util.Scanner; public class Main { static Scanner InOut = new Scanner(System.in); /** * @param args the c

我对Java比较陌生,目前正在夜校学习。我无法正确设置构造函数,以便它将输入的值移动到数组中。我有下面的代码,看起来各个字段都被正确地传递了,但是数组没有填充,我无法找出我做错了什么。我已经翻阅了我的笔记、课本,并在这里核对了一下。我可能只是盯着它看太久了

import java.util.Scanner;


public class Main {

static Scanner InOut = new Scanner(System.in);

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic here
    //* Declare and initalize variables. Set maximum number of students to 6.
    String surname = "", forename = "", course = "a", newCourse, tmpStu ="";
    int firstMark = 0, secondMark = 0, thirdMark = 0, finalScore = 0,
        option = 0, studentCount = 0, delNum, index = 0;
    final int MAXSTUDENT = 6;
    Student[] myClass = new Student[MAXSTUDENT];


    //* Set class details for the constructor. 

    while (option != 6) {

        //* Call the menu system to be displayed
        option = menu();

        switch (option) {
            //* Checks the value return by the menu for the selected option
            case 1:
                //* Checks that the maximum number of students has not been exceeded. 
                if (studentCount >= MAXSTUDENT) {
                    System.out.println("Maximum number of student entered. \n\n");
                    menu();
                } else {

                    //* Enter in the student details
                    InOut.nextLine();   /* ensures that the buffer is cleared*/

                    System.out.println("Enter student surname: ");
                    surname = InOut.nextLine();
                    System.out.println("Enter student forename: ");
                    forename = InOut.nextLine();
                    System.out.println("Enter 1st mark: ");
                    firstMark = InOut.nextInt();
                    System.out.println("Enter 2nd mark: ");
                    secondMark = InOut.nextInt();
                    System.out.println("Enter 3rd mark: ");
                    thirdMark = InOut.nextInt();
                    finalScore = 0;
                    //* Passes the entered paramaters to add the student details to the object class.
                    //* Increases the student counter by 1. 
                    myClass[studentCount] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore);
                    System.out.println(myClass[studentCount]);
                    studentCount++;

                }
                break;

            case 2:
                //* Enter in the student number to be deleted. Number is passed for deletion. 
                //* Reduces the number of student counter. 
                System.out.println("Delete which student?");
                delNum = InOut.nextInt();
                deleteStudent(delNum, studentCount);
                studentCount--;
                break;

            case 3:
                //* Allows for the course name to be updated. 
                InOut.nextLine();   /* ensures that the buffer is cleared*/
                System.out.println("Enter new course: ");
                newCourse = InOut.nextLine();
                Student.setCourse(newCourse);
                break;

            case 4:
                //* Display all details stored in the object class. 
                for (index = 0; index < studentCount; index = index + 1){
                Student.displayDetails(index);
                }
                break;

            case 5:
                //* Input the surname of student and this name is passed to 
                //* display the details for this student only. 
                InOut.nextLine();   /* ensures that the buffer is cleared*/
                System.out.println("Enter surname of student you want to search for: ");
                String searchName = InOut.nextLine();
               //* searchStudent(myClass, searchName, index, studentCount);
                break;

            case 6:
                //* Exit program
                System.out.println("End of program");
                break;
            default:
                System.out.println("Invalid option");
        }

    }

}

public static int menu() {

    //* Display menu options and returns selection. 
    System.out.println("****Student Menu****");
    System.out.println("1. Add new student details");
    System.out.println("2. Delete Student");
    System.out.println("3. Change Course");
    System.out.println("4. Display All Student Details");
    System.out.println("5. Search Student by Name");
    System.out.println("6. Exit");
    System.out.println("\nInput an option:");
    int option = InOut.nextInt();
    return option;
}



public void addStudent(String surname, String forename, String course, int firstMark, int secondMark, int thirdMark, int finalScore)
    //* Accepts passed paramaters of student details and adds them into the object class. 
{
    System.out.println(surname);
    System.out.println(forename);
    System.out.println(course);
    System.out.println(firstMark);
    System.out.println(secondMark);
    System.out.println(thirdMark);
    System.out.println(finalScore);





}

public static void deleteStudent(int delNum, int studentCount)
    //* Accepts student array number to be deleted and displays details of all
    //* students still stored. 
{
 //*       int asize = myClass.length, index;

 //*       for (index = delNum +1; index < asize; index++)
 //*       {
 //*           myClass[index-1] = myClass[index];
 //*       }
 //*       studentCount --;
}
这个

在上一个学生上添加每个新学生时,始终设置数组的第一个位置,应如下所示:

myClass[studentCount] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore);
System.out.println(myClass[studentCount]);//BEFORE the counter increment
studentCount++;
旁注:

此代码:

System.out.println(myClass[studentCount]);
不会打印学生包含的信息。为了打印它们,您必须覆盖
学生
类的
toString
方法,返回您想要打印的字符串

在上一个学生上添加每个新学生时,始终设置数组的第一个位置,应如下所示:

myClass[studentCount] = new Student(surname, forename, course, firstMark, secondMark, thirdMark, finalScore);
System.out.println(myClass[studentCount]);//BEFORE the counter increment
studentCount++;
旁注:

此代码:

System.out.println(myClass[studentCount]);

不会打印学生包含的信息。为了打印它们,您必须覆盖
学生
类的
toString
方法,返回您想要打印的字符串

您的代码没有任何严重问题。您只需按如下方式编辑部分内容:

首先,要查看Student类的getDeAttails()方法,您应该将其声明为 受保护的: 因此,新版本如下

protected String getDetails() 

{
    String details = "Student Name: " + surname + ", " + forename + "\n";
    details = details + "Course Name: " + course + "\n";
    details = details + "Student's Marks: " + firstMark + ", " + secondMark + ", " + thirdMark + "\n";
    details = details + "Final Mark: " + finalScore + "\n";
    return details;

}
在第一种情况下,你写的是好的。您只需使用适当的方法从数组中检索数据。因此,请使用以下代码:

//* Passes the entered paramaters to add the student details to the object class.
//* Increases the student counter by 1. 
myClass[studentCount] = new Student(surname, forename, course,   firstMark, secondMark, thirdMark, finalScore);
for(int i = 0;i<=studentCount;i++){
   System.out.println(myClass[i].getDetails());
   System.out.println("-----------------------");
}
studentCount++;
System.out.println("now the student count are: "+studentCount);
/*传递输入的参数以将学员详细信息添加到对象类。
//*将学生计数器增加1。
myClass[studentCount]=新生(姓氏、名字、课程、第一名、第二名、第三名、最后一名);

对于(int i=0;i您的代码没有任何严重问题。您只需按如下所示编辑部分代码:

首先,要查看Student类的getDeAttails()方法,您应该将其声明为 受保护的: 因此,新版本如下

protected String getDetails() 

{
    String details = "Student Name: " + surname + ", " + forename + "\n";
    details = details + "Course Name: " + course + "\n";
    details = details + "Student's Marks: " + firstMark + ", " + secondMark + ", " + thirdMark + "\n";
    details = details + "Final Mark: " + finalScore + "\n";
    return details;

}
在第一种情况下,您编写的代码是可以的。您只需使用适当的方法从数组中检索数据即可。因此,请使用以下代码:

//* Passes the entered paramaters to add the student details to the object class.
//* Increases the student counter by 1. 
myClass[studentCount] = new Student(surname, forename, course,   firstMark, secondMark, thirdMark, finalScore);
for(int i = 0;i<=studentCount;i++){
   System.out.println(myClass[i].getDetails());
   System.out.println("-----------------------");
}
studentCount++;
System.out.println("now the student count are: "+studentCount);
/*传递输入的参数以将学员详细信息添加到对象类。
//*将学生计数器增加1。
myClass[studentCount]=新生(姓氏、名字、课程、第一名、第二名、第三名、最后一名);

对于(int i=0;i@SergiiZagriichuk嗯,是的,没有看到它,打印应该在增量之前,感谢Sapologies我应该说我正在尝试查看数组是否已填充,所以我将数组设置为0进行测试,但返回空值。我再次检查了更改以使用计数器,但得到了相同的结果。感谢您的帮助,我ts非常感谢!@user2512005您能发布所有相关代码吗?此代码应该可以工作,如果数组未填充,则表示您有其他可能正在擦除的代码it@BackSlash我已经更新了原来的帖子,包含了完整的代码。这仍然是一个正在进行的工作,所以我不希望所有的工作,但我主要关心的是数组没有填充。再次感谢您的帮助!@反斜杠感谢您的帮助!我想我对显示有点搞混了,就像您在上面的overide toString一样,我现在就来试一试。@SergiiZagriichuk好的,是的,没有看到,打印应该在增量之前,谢谢。我应该说我正在尝试查看数组是否为popu因此,我将数组设置为0进行测试,但返回null。我再次检查了更改以使用计数器,但得到了相同的结果。感谢您的帮助,非常感谢!@user2512005您能发布所有相关代码吗?此代码应该可以工作,如果未填充数组,则表示您有其他可能正在擦除的代码Git@BackSlash我已经更新了原始帖子以包含完整的代码。这仍然是一个正在进行的工作,所以我不希望它全部工作,但我主要关心的是数组没有填充。再次感谢您的帮助!@BackSlash感谢您的帮助!我想我对显示有点困惑,就像您在上面对overside toString的显示一样,我会放弃现在开始吧。我想你知道java的fandamentals,但在某些细节上你有问题。我想你知道java的fandamentals,但在某些细节上你有问题。