我创建了一个基于控制台的简单学生系统,该程序基本上会询问您是否要输入学生姓名或查看您输入的姓名列表。输出流程如下所示:

*******基于控制台的学生系统************
1.输入学生姓名
2.学生名单
输入选择数量:1
输入学生人数:3
********************************************
1号学生
输入全名:Alpha Jones
********************************************
2号学生
输入全名:Beta Jones
********************************************
3号学生
输入全名:Gamma Jones
您是否要返回菜单?(是/否):是

*******基于控制台的学生系统************
1.输入学生姓名
2.学生名单
输入选择数量:2
******学生名单******
空值
空值
空值

首先,我输入了三个新学生,分别是Alpha Jones,Beta Jones和Gamma Jones,但是当我选择查看所有姓名时,所有内容均为空。这三个名称应出现。

这是学生班的代码:

public class Student {
private String[] names;
private int numInput;

public Student(){

}

public Student(String[] fullName, int nI){
    numInput = nI;
    names = new String[nI];
    for(int index = 0; index < nI; index++){
        names[index] = fullName[index];
    }
}

public String[] getList(){
    return names;
}

public int getNumStudents(){
    return numInput;
}
}


在这里,我设置了将从PracticeOne类传递的值,之后,我将该值返回以显示在PracticeOne类中。

这是PracticeOne类(这是main方法所在的位置):

import java.util.Scanner;
public class PracticeOne {
public static void main(String[]args){
    Scanner hold = new Scanner(System.in);
    int menuNumChoice;

    String response;
    do{

        System.out.println("******CONSOLE BASED STUDENT SYSTEM******");
        System.out.println("1. Input Student Name");
        System.out.println("2. List of Students");
        System.out.print("Enter the number of choice: ");
        menuNumChoice = hold.nextInt();

        switch(menuNumChoice){
            case 1:
                inputStudentName(hold);
                break;
            case 2:
                listStudents();
                break;
            default:
                System.out.println("ERROR 101");
                break;
        }

        System.out.print("Do you wish to proceed?(y/n): ");
        response = hold.nextLine();

    }while(response.equalsIgnoreCase("y"));
}

public static void inputStudentName(Scanner hold){
    int numInput;


    System.out.print("Enter number of students to input: ");
    numInput = hold.nextInt();

    hold.nextLine();
    String[] fullName = new String[numInput];

    for(int x = 0; x < numInput; x++){

        System.out.println("***************************");
        System.out.println("Student No. " + (x + 1));
        System.out.print("Enter full name: ");
        fullName[x] = hold.nextLine();
        System.out.println();

    }

    Student s = new Student(fullName,numInput);

}

public static void listStudents(){
        Student s = new Student();
        System.out.println("******LIST OF STUDENTS******");
        for(int y = 0; y < s.getNumStudents();y++){
            System.out.println(s.getList());
        }

}
}


首先,我在inputStudentName()方法中调用了Student的实例,该实例传递了全名和所使用数组的数量的参数,然后尝试将其传递给Student类的构造函数,以便稍后从那里获取值。

在listStudents方法中,我尝试通过从Student类调用getList()方法来显示它,以取回早先输入的名称,但所有内容均为NULL。我也尝试通过getNumStudents()方法取回数组的数量,但是它也失败了。

请分享一些有关如何解决此问题的建议,或者如果有更好的方法,请提出新的建议以实现我的目标。

最佳答案

public static void listStudents(){
        **Student s = new Student();**
        System.out.println("******LIST OF STUDENTS******");
        for(int y = 0; y < s.getNumStudents();y++){
            System.out.println(s.getList());
        }

}


这是您的listStudents逻辑。无需使用已经创建的数据,只需创建一个新的Student实例即可。不包含任何信息是很正常的。

在输入法中,您也仅将数据保存在本地变量中。这意味着,一旦方法完成,数据就会丢失。

将静态List<Student> students = new ArrayList<>();添加到您的班级。在每种输入法的末尾,将Student对象添加到此列表中。
在listStudents中,不要创建本地学生,而是打印您存储在此List中的学生。

09-11 03:09