【问题标题】:Making an array of objects制作对象数组
【发布时间】:2014-02-20 11:51:30
【问题描述】:

我创建了一个名为 Fish 的类:

public class  Fish {

    private String species;
    private int size;

    //Constructor
    public Fish(int x, String s) {
        size = x;
        species = s;
    }

    public String getSpecies() { return species; }

    public int getSize() { return size; }

    public String toString() {
        return String.format("A %dcm %s", size, species);
    }
}

我还开始创建一个名为池塘的类,该类具有一个名为“fish”的属性,该属性包含一组 Fish 对象。我不确定如何做到这一点。到目前为止,这是我的尝试。我是

public class Pond {
    private int capacity;
    private Object[] fish; //This is what I am trying to initialize. list of Fish. 
    private int numFish;

    //Capacity Constructor 
    public Pond(int n, int c) {
        n = numFish;
        c = capacity; 
    }

    public int getNumFish() { return numFish; }

    public boolean isFull() {
        boolean isFull = false;
        if (numFish >= capacity) {
            isFull = true;
        }
        else {
            isFull = false;
        }
        return isFull;
    }

    public String toString() {
        return String.format("Pond with %d fish", numFish);
    }

    public void add(Fish aFish) {
        if (numFish <= capacity) {
            numFish += 1;
            fish.add Fish;
        }
        else {
            numFish += 0;
        }
    }
}

【问题讨论】:

  • docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html。顺便说一句,我看不到任何问题。只是两点:如果它是一个鱼数组,它应该是Fish[]类型,并命名为fishes(数组==>多个鱼==>复数形式)
  • @JBNizet fish 也是 fish 的复数形式,我认为(这里不是母语人士)。但是,是的,在这种情况下,鱼可能更好。
  • @peter.petrov:谢谢。我今天学到了一些东西。

标签: java arrays class object hierarchy


【解决方案1】:

改变这个:

private Object[] fish;

如下:

private Fish[] fish;

即这些是鱼,而不仅仅是任何
各种物体(它们不是哺乳动物,例如)。

【讨论】:

    【解决方案2】:

    以下无效-

    fish.add aFish;
    

    用你做的数组

    fish[numFish] = aFish; //increment numFish after this
    

    你还需要初始化你的数组

    fish = new Fish[capacity];
    

    在你的构造函数中。

    【讨论】:

      【解决方案3】:

      Pond 构造函数中,您将私有字段分配给构造函数参数。我认为应该反过来:

      public Pond(final int n, final int c) {
          numFish = n;
          capacity = c;
      }
      

      附注:在编译时声明 Pond 构造函数参数 finalprevent 这类错误。

      另外,如果您想在运行时扩展fish 数组,那么array 不是容器类型的最佳选择。 ArrayList&lt;Fish&gt; 是更好的选择,因为它可以在运行时扩展。

      【讨论】:

        【解决方案4】:

        您需要使用ArrayList 而不是Array,因为 ArrayList 可以根据需要增长。

        看看这段代码。应该对你有帮助:

        public class Fish {
        String name;
        
        
        public Fish(String name) {
        
            this.name=name; 
        
        }
        
        public String toString() {
            return name;
        }
        }
        

        然后:

        import java.util.*;
        
        public class Pond {
        
        ArrayList<Fish> fishInPond = new ArrayList<>();
        
        
        public void addFish(Fish e) {
        
            fishInPond.add(e);
        }
        
        public void showFishes() {
            for (int i= 0; i<fishInPond.size();i++) {
                fishInPond.get(i);
           } 
            System.out.println("Fishes in my pond: " + fishInPond);
        }
        
        
            public static void main(String[]args) {
                Pond myPond = new Pond();
                myPond.addFish(new Fish("Tilapia"));
                myPond.addFish(new Fish("cat fish"));
        
                myPond.showFishes();
            }
        

        }

        【讨论】:

        • 非常感谢!这对我帮助很大。现在有什么方法可以删除列出的鱼周围的方括号吗?例如,不显示 [Tilapia, cat fish] 而是显示 Tilapia, cat fish ?
        • 也许打印出来时让每条鱼都有自己的线条?
        • 有几种方法可以做到这一点,我建议你阅读this
        猜你喜欢
        • 2015-05-19
        • 2023-03-21
        • 2021-05-31
        • 1970-01-01
        • 2018-06-15
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多