【问题标题】:Java - Using an object inside an objectJava - 在对象内使用对象
【发布时间】:2014-10-30 21:32:31
【问题描述】:

我正在做一个项目(昨天我遇到了一个问题,很多人帮助了我!)所以我决定再次寻求帮助。

我的代码有 3 个类。项目主、学生、教室。我创建了一组 Classroom 对象。现在我有 3 个教室对象。但我必须将学生对象分配给这些教室对象。例如: classarray[0] 是 Classroom 类的对象, studentobject.get(0) 、 studentobject.get(1) ... 将是 classarray[0] 对象中的学生对象。但是我在编码时失败了。这是我的课程:

  public class Classroom
{

    private String classname;
    private String word[] = null;
    protected ArrayList<Students> studentobject = new ArrayList<Students>(10);

    public String[] getWord()
    {
        return word;
    }

    public void setWord(String[] word)
    {
        this.word = word;
    }

    public ArrayList<Students> getStudentobject()
    {
        return studentobject;
    }

    public void setStudentobject(ArrayList<Students> studentobject)
    {
        this.studentobject = studentobject;
    }

    public String getClassname()
    {
        return classname;
    }

    public void setClassname(String classname)
    {
        this.classname = classname;
    }

    public void classroomreader(String filename)
    {
        // This method gets the name of Classroom
        File text = new File("C:/Users/Lab/Desktop/classlists/" + filename
                + ".txt");
        Scanner scan;
        try
        {

            scan = new Scanner(text);
            String line = scan.nextLine();
            word = line.split("\t");
            line = scan.nextLine();
            word = line.split("\t");

        } catch (FileNotFoundException e1)
        {
            e1.printStackTrace();
        }

    }

}

这是我的学生班:

public class Students extends Classroom
{

    private String name,id;
    private int age;




    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
    public String getId()
    {
        return id;
    }
    public void setId(String id)
    {
        this.id = id;
    }
    public int getAge()
    {
        return age;
    }
    public void setAge(int age)
    {
        this.age = age;
    }

还有我的主要课程:

public class ProjectMain
{

    public static void main(String[] args)
    {

        Classroom[] classarray = new Classroom[3];


        //I got 3 Classroom objects here
        classarray[0]=new Classroom();
        classarray[1]=new Classroom();
        classarray[2]=new Classroom();

        classarray[0].classroomreader("class1"); 

        classarray[0].studentobject.get(0).setName(classarray[0].getWord()[1]);
//The problem is in here. When my code comes to the line above, 
// at java.util.ArrayList.rangeCheck(Unknown Source) error comes out. 
// I tried to get first object in studentobject Arraylist, and tried to set it's name 
// to the variable which my text reader reads. 

我怎样才能写下我的想法?

【问题讨论】:

  • studentobject.get() 没有引用任何内容。你有一个方法叫做getstudentobject()
  • 你有Students extends Classroom - 我不认为“学生”是一种“教室”。
  • 我会阅读Is-a(扩展)Has-a(参考)关系和继承。大声说出来会很有帮助。 “学生是教室”有意义吗?不应该是“教室有学生”吗?
  • 你永远不会创建任何学生实例...因为 classarray[0].studentobject 是空的,试图获取它的第一个实例失败...

标签: java arrays object arraylist


【解决方案1】:

您的教室阅读器方法读取文件,但不做太多事情......也许您想在其中创建一些学生实例。

        scan = new Scanner(text);
        String line = scan.nextLine();
        word = line.split("\t"); // won't be used
        line = scan.nextLine();
        word = line.split("\t"); // erased here

在 word 属性中,您只有文件的最后一行(拆分)。

【讨论】:

    【解决方案2】:

    在创建 Classroom 实例时,studentobject 列表被创建为空并保持不变,因此您无法访问其中的第一个(或任何)对象。

    要填充您的列表,您可以像这样添加到Classroom 方法:

    public void addStudent(Student s)
    {
        studentobject.add(s);
    }
    

    【讨论】:

      【解决方案3】:

      classroom 包含以下字段声明

      String word[] = null; 
      

      主类,包括教室阅读器没有为此字段设置值。然而你要调用

      classarray[0].getWord()[1] 
      

      然后它必须失败。

      提示:不要使用这样的表达方式,这种表达方式可以在您的主课中找到(至少在开发或学习的早期阶段不会)

      classarray[0].studentobject.get(0).setName(classarray[0].getWord()[1]);
      

      分解成变量和几个步骤。如果上下文不受干扰,编译器足够聪明,可以生成相同的代码,即长表达式被解析为单个块。 永远不要忘记编程语言的目的是使程序对人类可读。 :) 带有缩写或“技巧”的代码只是显示了一些哲学态度(恕我直言)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 2016-08-29
        • 1970-01-01
        • 1970-01-01
        • 2021-07-20
        • 2011-04-27
        • 2014-03-20
        相关资源
        最近更新 更多