【问题标题】:Array reference type in a method方法中的数组引用类型
【发布时间】:2015-10-25 04:14:17
【问题描述】:

我已经获得了一个项目的起始代码,但是我对以下代码感到困惑,并且似乎无法在网上找到任何示例!

public static Entity[][] read(){ ... }

如何处理该实体以向数组添加新条目,然后如何返回?

以下构造函数由不同的类调用。

public World() {
    aWorld = new Entity[SIZE][SIZE];
    int r;
    int c;
    for (r = 0; r < SIZE; r++) {
        for (c = 0; c < SIZE; c++) {
            aWorld[r][c] = null;
        }
    }
    aWorld = FileInitialization.read();
}

我觉得如果数组只是一个参数或者类似这样的东西会简单得多:

public static int[][] read(){ ... }

更新:

目标是在方法 read() 中读取文件,然后根据文件中的位置将实体分配到正确的位置。但我无法分配,因为数据类型不兼容,必需是实体,但我希望能够将其设置为 int、char 或 String。

【问题讨论】:

  • 这是一个Entity 类型的二维数组(而不是您的示例中的int
  • 那么我可以用什么数据类型来修改这个数组呢?
  • 您的代码中有一些毫无意义的东西:(1)您正在使用 null 初始化数组,这已经默认完成,(2)您正在重新分配您之前使用 new 创建的 aWorld 数组从FileInitialization.read 返回的数组,这使得构造函数的第一部分代码毫无意义。
  • Entity 类型。
  • 不幸的是,我不允许修改此代码,因为这是要求之一,可能教授具有不同语言的背景作为他进行初始化的原因?第二部分可能是让他教我们oop。

标签: java arrays oop multidimensional-array methods


【解决方案1】:

要添加到对象数组中,您可以使用原始数组(例如ints)执行操作,只需使用Entitys。因此,如果您想向 aWorld 添加一些内容,请使用

aWorld[r][c] = new Entity(...); //with provided constructor's parameters
// or
aWorld[r][c] = existing_Entity; //for an Entity variable you already have

添加完成后,您只需返回数组aWorld

【讨论】:

  • 谢谢!我在正确的轨道上,但我不明白的一件事是,当我尝试进入数组时,我得到一个错误不兼容类型,“必需:实体,找到:int”我想以某种方式强制转换?
  • @user3170899 不,Entity[][]Entity 对象的数组。为什么要在里面放一个int
【解决方案2】:

如果 FileInitialization 的静态 read() 将返回 Entity[][],那么它本身就是一个实体数组。这意味着您不应该迭代aWorld,而应该像

那样直接将返回值分配给它

aWorld = FileInitialization.read();

在 read() 中,使用你在构造函数中创建的 for 循环并添加一个新的 Entity 对象,如 Linus 所述

【讨论】:

    【解决方案3】:

    好的,我想在这里对你们所有人表示感谢,因为我的方向是正确的。但我想分享我的答案,它应该很简单,希望将来能让别人的生活更轻松。

    要初始化对象数组,只需像初始化任何其他数组一样,在这种情况下:

    Entity[][] reference_name = new Entity[SIZE][SIZE];
    

    要返回这个值,只需返回引用:

    return reference_name;
    

    现在是您实际修改数组条目的部分。 假设你有类似的东西

    public static void Entity[][] read() { .. }
    

    你需要创建一个类文件Entity.java(与被传递的数组类型同名)

    在这种情况下,它看起来像这样:

    public class Entity {
    private char appearance;
    
    public Entity(char anAppearance) {
    
        appearance = anAppearance;
    }
    

    现在给这个数组一个条目做这样的事情:

    reference_name[0][0] = new Entity('X');
    

    好吧,如果您想知道如何显示它,只需向 Entity 类添加一个访问器方法。

    public char getAppearance() {
    
        return(appearance);
    }
    

    并输出:

    System.out.println(reference_name[0][0].getAppearance(); );
    

    【讨论】:

      猜你喜欢
      • 2013-02-17
      • 1970-01-01
      • 2019-07-13
      • 2022-06-15
      • 2020-12-20
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多