Java 构造函数未设置数组
我对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
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,但在某些细节上你有问题。