当前位置: 首页 > 知识库问答 >
问题:

试图创建一个对象数组时,数组的长度和数组中的对象都由用户决定

壤驷睿
2023-03-14
Scanner nos = new Scanner(System.in);
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,代码将停止运行。}

共有1个答案

卫焕
2023-03-14

在Java中,不可能像在Python中那样在数组中存储不同的数据类型。但是,您可以做的是为每个特性创建实例变量,然后创建一个构造函数,在其中存储用户对每个student对象的输入。像这样:

java prettyprint-override">//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循环来在数组的每个索引中存储一个新的student对象,然后有一个for循环来存储每个student对象的变量。实际上,您可以使用一个for循环来完成所有这些操作。在循环中,您将使用扫描器对象检索每个学生的firstnamelastnameageid的用户输入。从这里开始,您将为创建的每个新student对象分配这些变量,并将该对象存储在您的students数组中。我添加了一些print语句,为用户的输入提供了更多的上下文。然后可以使用system.out.printf()而不是system.out.println来格式化输出。至于您的程序在用户输入“end”时停止,因为您将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);
}
 类似资料:
  • 问题 你有一组对象,例如: cats = [ { name: "Bubbles" age: 1 }, { name: "Sparkle" favoriteFood: "tuna" } ] 但是你想让它像词典一样,可以通过关键字访问它,就像使用 cats["Bubbles"]。 解决方案 你需要将你的数组转换为一个对象。通过这样使用 reduce: #

  • 我在创建包含自定义对象数组的数组时遇到了问题。 出于多种原因,我希望将容器创建为可比较数组的标准数组: 其中包含的每个自定义对象数组必须具有不同的长度 自定义对象数组内置了自动排序工具,这些工具不适合我希望它们适合的较大包含数组 自定义对象数组可以工作,并且已经过彻底测试。 我在创建较大对象时收到的例外情况是: 线程“main”中出现异常java.lang.ClassCastException:

  • 我需要创建一个对象(银行),其中包含一组客户端和bankID。我的问题是,我不知道如何在主函数中创建银行。 银行类别: 客户端类: 主要类别: 这些是问题所在: 你必须创建一个程序来模拟银行活动。该系统包括以下模块:银行—客户(客户数组)— idBank(字符串)5 BancAccount — accountNumber(字符串)—金额(浮点)客户—姓名(字符串)—地址(字符串)—账户(银行账户数

  • 我有两个数组:和。 数组中的示例值:。 数组中的值示例:。 我需要创建一个JavaScript对象,将数组中的所有项放在同一个对象中。例如

  • 我有一个从列表中选择项目的代码,我有一个扫描器来扫描文件(每行有电影,然后是演员),并将电影添加到数组中。我该怎么做才能让它添加到arraylist中的每一部电影都能在线存储紧随其后的演员?例如:每行有一行是电影名(日期)/LastName、FirstName/Lastname2、Firstname2/等等。我的代码包含一个类电影,它将电影名称转换为字符串。我怎么能在任何给定点搜索任何电影,并让它

  • 问题内容: 我是Java的新手,当时我用Java创建了一系列对象。 例如,我有A类 但这只是创建指向A的指针(引用),而不是4个对象。它是否正确?我看到当我尝试访问创建的对象中的函数/变量时,出现空指针异常。为了能够操作/访问对象,我必须这样做 这是正确的还是我做错了什么?如果这是正确的,那真的很奇怪。 编辑:我觉得这很奇怪,因为在C ++中,你只是说新的A [4],它创建了四个对象。 问题答案: