java - 尝试创建一个对象数组,数组的长度和数组中的对象都由用户确定
问题描述
Scanner nos = new Scanner(System.in);
上面我有一个循环,它遍历由用户输入确定的学生人数的长度。从那里他们应该填写四个不同的属性:Firstname、Lastname、age 和 id,这四个属性构成一个对象。System.out.println("输入学生人数");
int z = Integer.parseInt(nos.nextLine());
if (nos.equals("end") | nos.equals("End") | nos.equals("END")) {
System.exit(0);
}
System.out.println("Number of Students is " + z);
Student[] Students = new Student[z];
数组长度是预先确定的,并且从那里根据对象的数量和所有属性,将打印一个数组以以四个属性的形式显示所有对象。
for (int i = 0; i < z; i++) {
Students[i] = new Student();
for (int g=0; g<z; g++) {
Students[i] = new Student[] {firstname + "," + lastname + "," + age + "," + id};
System.out.println(Students[i]);
我在数据类型既是字符串又是整数时遇到了麻烦,我找不到创建两种数据类型数组的好方法。此外,如果用户在任何时候输入 end,代码将停止运行。}
解决方案
对于 Java,不可能像在 Python 中那样在数组中存储不同的数据类型。但是,您可以做的是为每个特征创建实例变量,然后创建一个构造函数,在其中存储每个学生对象的用户输入。像这样:
//instance variables
String firstName;
String lastName;
int age;
int id;
//constructor for Student class
public Student(String firstName, String lastName, int age, int id) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.id = id;
}
我看到你有一个 for 循环来在你的数组的每个索引中存储一个新的学生对象,然后另一个 for 循环来存储每个学生对象的变量。实际上,您可以使用一个 for 循环来完成所有这些工作。在循环内部,您将使用扫描仪对象来检索每个学生的firstname
、lastname
、age
和id
. 从这里,您将为创建的每个新学生对象分配这些变量,并将该对象存储在学生数组中。我添加了一些打印语句,为用户的输入提供更多上下文。然后,您可以使用 aSystem.out.printf()
而不是System.out.println
来格式化您的输出。至于您的程序在用户输入“结束”时停止,因为您正在制作您的z
变量解析为整数,它需要一个整数。您可以通过将用户的输入作为字符串传递并在 if 语句之后将变量解析为新的 int 变量来简单地解决此问题。
这是代码:
Scanner nos = new Scanner(System.in);
String z = nos.next();
if (z.equals("end") || z.equals("End") || z.equals("END")) {
System.exit(0);
}
System.out.println("Enter number of students: ");
int studentNumber = Integer.parseInt(z);
System.out.println("Number of Students is " + studentNumber + "\n");
Student[] students = new Student[studentNumber];
for (int i = 0; i < students.length; i++) {
System.out.println("Enter student " + (i+1) + "\'s first name:");
String firstname = nos.next();
System.out.println("Enter student " + (i+1) + "\'s last name:");
String lastname = nos.next();
System.out.println("Enter student " + (i+1) + "\'s age:");
int age = nos.nextInt();
System.out.println("Enter student " + (i+1) + "\'s id:");
int id = nos.nextInt();
students[i] = new Student(firstname, lastname, age, id);
System.out.printf("Student %d: %s, %s, %d, %d\n", i + 1, students[i].firstName, students[i].lastName, students[i].age, students[i].id);
}
如果你想在你的数组中显示所有信息,你可以按照前面的代码:
System.out.println("\nAll students in array:" );
for(int i = 0; i < students.length; i++) {
System.out.printf("Student %d: %s, %s, %d, %d\n", i + 1, students[i].firstName, students[i].lastName, students[i].age, students[i].id);
}
推荐阅读
- python - __getattr__ 与文件夹中的文件夹中的 __import__ 不起作用
- ios - 在 iOS 中匹配一个按钮框架
- java - 为什么我不能在方法之外调用变量?
- javascript - getaddrinfo ENOTFOUND https://graph.facebook.com/
- qt - ListModel 包含委托的数据属性
- ruby-on-rails - 如何在 Rails 中使用 PostgreSQL 的 BETWEEN 来避免重复时间戳?
- vue.js - 如何在 Nuxt.js 中创建骨架加载?
- javascript - 我无法使用 RNFS 使用从 RNCameraRoll 获取的 phasset 读取文件
- python - 将键添加到键中已有的值,然后根据键名添加额外的值和键
- android - 如何将下一行从 Java 转换为 Kotlin