【问题标题】:Insert Object into Java Array将对象插入 Java 数组
【发布时间】:2014-10-30 20:42:41
【问题描述】:

我从老师那里得到了下一个作业-

我需要建立一个Course 类和Student 类 并将每个学生插入课程类 每个学生都有一个 ID、姓名和年级。

我已经尝试了下一个代码:

 public class Course {

    Student[] android = new Student[100];


    private void addStudent(Student a) {
        for (int i=0;i<android.length;i++) {
            if (android[i] == null) {
                android[i] = a;
                break;
            }
        }

    }

    public static void main(String[] args) {
        addStudent(Joe);

    }

}

我需要将我在 Student 类中创建的 Student 插入到数组中的第一个空位置。 当我尝试addStudent(Joe); 时,它给了我一个错误:“Joe 无法解析为变量”

学生类代码:

    public class Student {


                private float grade;
                private String name;
                private long id;
           public Student(long c,String b,float a) {
               grade = a;
               name = b;
               id = c;
           }
             public static void main(String[] args) {
             Student Joe = new Student(1,"Joe",40);
}

**该数组包含 100 个学生(开始时为空)

  • 添加学生时 - 我需要检查数组中的第一个空值并将其放入 那里

  • 打印学生时:我只需要打印数组中的非空对象**

【问题讨论】:

  • Student[] android = new Student[100];android[i] = a ; - 问题已解决。
  • Array[] Android = new Array[100]; -- 我不认为这条线做你认为的那样。也许你想要Student[] camelCaseName = new Student[100];
  • 任何人都应该提供答案

标签: java arrays class object constructor


【解决方案1】:

这段代码

Array[] Android = new Array[100];

正在创建Array 类型的数组,因此您只能在其中存储Array 对象。
如果你想存储Students,你需要创建一个数组,而不是:

Student[] android = new Student[100];

此外,您需要意识到 Java 中的数组是从 0 开始索引的。也就是说,您不能引用与数组大小相同的位置。在你的情况下,你做了 一个包含 100 个元素的数组,但您的 for 循环试图将 101 个对象放入其中。

此外,您的问题文本暗示您只想插入新的Student 对象一次,但您的循环会将其放入数组中的每个空位置。

试试这个:

    for (int i=0;i<android.length;i++) { // < instead of <=, don't hardcode the length
        if (android[i] == null) {
            android[i] = a;
            break;                       // once we insert a, stop looping
        }
    }

更新

编译器找不到Joe的原因是范围的问题。您已在 Student 类的 main() 方法中将 Joe 声明为 local 变量。如果您希望编译器能够看到它,则需要以您使用它的相同方法声明它:

public static void main(String[] args) {
    Student Joe = new Student(1,"Joe",40);
    addStudent(Joe);
}

在 Google 上快速搜索“Java 变量范围教程”应该会让您了解如何以及何时可以使用局部变量和成员变量。

【讨论】:

  • 谢谢,工作。但现在我正在使用addStudent(Ofir);,它给了我一个错误“Ofir 无法解析为变量”,并且 Ofir 是我在学生课程中制作的学生。
  • 除非它是公开的,否则它不会在 Student 课程中帮助您。为什么不在你的 Course 类中创建 Ofir?
  • @Ambassador 这是一个完全不同的问题。您可能应该就此提出一个新问题,或者至少编辑您的原始问题并向我们展示给出此问题的代码。
  • 非常感谢!所以没有办法从 Course 类中“addStudent”而不用相同的方法声明它?
  • 每个Student 都必须在某个地方实例化。如果您想使用在别处创建的方法,您需要有一种方法来引用它,例如 static 成员,或者可能作为Course 中另一个方法的参数。查看the Java tutorials on variables 了解更多信息。
【解决方案2】:

将学生 S (1111,"ahmed",3.5) 的方法插入到学生数组 (id,name,GBG) 数组大小为 100 且当前大小 =3 的位置“p”中。

-remove 方法,从 student .array 大小为 100 且 currentsize=3 的数组中移除 GBG =2.5 的学生

【讨论】:

    【解决方案3】:

    首先,改变

    Array[] Android = new Array[100]; 
    

    Student[] listOfStudent = new Student[100];
    

    这样做是创建一个大小为 100 的数组,该数组的类型是 Student,这就是您将要插入到数组中的内容。你也必须改变

    for (int i=0;i<=100;i++) {
            if (Android[i] == null) {
                Android[i] = a;
    
            }
    }
    

    for(int i=0; i < listOfStudents.length; i++){
        if(listOfStudents[i] == null){
            listOfStudent[i] = a;
        }
    }
    

    否则您将收到“列表越界”错误。最好不要将值硬编码到您的代码中 - 未来的良好做法!

    祝你好运!

    【讨论】:

      猜你喜欢
      • 2013-10-05
      • 2016-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2016-11-05
      相关资源
      最近更新 更多