Java,将对象传递给另一个类

时间:2014-01-26 00:09:50

标签: java arrays class object methods

我是java的新手,我正在尝试理解面向对象的编程。

我正在尝试将对象存储在数组中。但是,该数组位于与原始对象不同的类中。我得到一个编译器错误“不兼容的类型”(1类)找到(另一个类)。

请查看我的代码,让我知道我做错了什么。

这是来自“Cluster”类,这个方法应该将类“FeatureVector”中的对象存储到一个名为“featureV”的数组中。

 public boolean add (FeatureVector examples){
    int currentPosition;

    if (this.getSize()==this.featureV.length){
      return false;
    }
    else 
      currentPosition=this.getSize();
    featureV[currentPosition+1]=examples;
    return true;

编辑:

这是Cluster的定义方式以及featureV:

class Cluster{
  private Cluster [] featureV;


Cluster(int capacity){
  Cluster [] featureV= new Cluster [capacity];

错误:

错误:不兼容的类型   必需:群集   发现:FeatureVector

如果有帮助,这是我应该达到的要求和输出:

Cluster c;  
c = new Cluster(10);  
c.add(new FeatureVector("A", new double[] { 0.0, 0.0 }));  
c.add(new FeatureVector("B", new double[] { 1.0, 1.0 }));  
c.add(new FeatureVector("C", new double[] { 1.0, 0.0 }));  
c.add(new FeatureVector("D", new double[] { 2.0, 0.0 }));  
FeatureVector.setVerbose(true);  
System.out.println(c);

以上语句将在控制台上显示以下内容:

Cluster: {A: {0.0, 0.0}, B: {1.0, 1.0}, C: {1.0, 0.0}, D: {2.0, 0.0}}

如果需要更多信息,请告知我们。

非常感谢你!这个论坛是一个启示。 :)

2 个答案:

答案 0 :(得分:0)

class Cluster{
  private FeatureVector [] featureV;


Cluster(int capacity){
  FeatureVector [] featureV= new FeatureVector [capacity];

您正在定义某种类型的对象数组(此处为:Cluster),并且您希望在此数组中存储另一个对象;这种不相容。您必须定义要在其中存储对象的类的数组。

答案 1 :(得分:0)

在add(FeatureVector示例)中,您将Class FeatureVector的Object存储在数组featureV

public boolean add (FeatureVector examples){
  [...]
  featureV[currentPosition+1]=examples;
  [...]
}

要使其工作,featureV必须属于FeatureVector []类或FeatureVector []的超类。

但是当你在第二个片段中声明变量featureV时,你将它声明为Cluster []

class Cluster{
  private Cluster [] featureV;

除非FeatureVector扩展Cluster(在这种情况下可能没有意义)featureV是错误的类型以适合FeatureVector。 您需要将featureV的类型更改为FeatureVector []

class Cluster{
  private FeatureVector [] featureV;

为了解释这一点,我们可以将类类型和变量名更改为其他内容:

class FruitBasket {
  private FruitBasket [] fruits;

  public boolean add (Fruit examples){
    fruits[currentPosition+1]=examples;
  }
}

所以现在我们有了一个FruitBasket类,其中FruitBasket类的每个Object都包含一个FruitBaskets数组。所以我们有一定数量的插槽可以安装FruitBaskets。 现在在你的add方法中你拿水果并尝试将它们挤进FruitBasket-slots。 你能明白为什么这不起作用吗? 您只能将兼容对象从一个转换为另一个。因此,当你说水果时你可以使用苹果或橙子,当它说FruitBaskets时,你不能使用水果。

所以你要这样做:

class FruitBasket {
  private Fruit [] fruits;

  public boolean add (Fruit examples){
    fruits[currentPosition+1]=examples;
  }
}

这可能就是你的意图。这个FruitBasket现在有一定数量的水果槽,现在你可以使用add() - 方法在篮子里添加另一个水果。