我是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}}
如果需要更多信息,请告知我们。
非常感谢你!这个论坛是一个启示。 :)
答案 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() - 方法在篮子里添加另一个水果。