Java,将对象传递给不同的类
我是java新手,正在努力理解面向对象编程 我正在尝试将对象存储在数组中。但是,该数组位于与原始对象不同的类中。我得到一个编译器错误,不兼容类型需要1个类找到另一个类 请看一下我的代码,让我知道我做错了什么 这是来自类集群的,该方法应该将类FeatureVector中的对象存储到名为featureV的数组中Java,将对象传递给不同的类,java,arrays,class,object,methods,Java,Arrays,Class,Object,Methods,我是java新手,正在努力理解面向对象编程 我正在尝试将对象存储在数组中。但是,该数组位于与原始对象不同的类中。我得到一个编译器错误,不兼容类型需要1个类找到另一个类 请看一下我的代码,让我知道我做错了什么 这是来自类集群的,该方法应该将类FeatureVector中的对象存储到名为featureV的数组中 public boolean add (FeatureVector examples){ int currentPosition; if (this.getSize()=
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;
编辑:
这就是集群的定义方式以及功能V:
class Cluster{
private Cluster [] featureV;
Cluster(int capacity){
Cluster [] featureV= new Cluster [capacity];
错误:
错误:不兼容的类型
必需:群集
发现:特征向量
如果有帮助,以下是我应该达到的要求和输出:
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}}
如果需要更多信息,请告诉我
非常感谢你!这个论坛是一个启示 试试看
class Cluster{
private FeatureVector [] featureV;
Cluster(int capacity){
FeatureVector [] featureV= new FeatureVector [capacity];
您在这里定义了一个特定类型的对象数组:Cluster,并且您希望在此数组中存储另一个对象;这是不相容的。必须定义要在其中存储对象的类的数组。在addFeatureVector示例中,将类FeatureVector的对象存储在数组featureV中
public boolean add (FeatureVector examples){
[...]
featureV[currentPosition+1]=examples;
[...]
}
要使其工作,featureV必须属于FeatureVector[]类或FeatureVector[]的超类
但是在第二个代码段中声明变量featureV时,您将其声明为Cluster[]
class Cluster{
private Cluster [] featureV;
除非FeatureVector扩展集群,否则在本上下文中可能毫无意义,否则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的每个对象都包含一个FruitBasket数组。因此,我们有一定数量的插槽,可以安装果篮。
现在在你的添加方法中,你拿水果并试着把它们挤进果篮的槽中。
你能明白为什么这不起作用吗?
只能将兼容对象从一个强制转换到另一个。所以,当它说水果时,你可以用苹果或桔子,但当它说水果篮时,你不能用水果
所以你要做的是:
class FruitBasket {
private Fruit [] fruits;
public boolean add (Fruit examples){
fruits[currentPosition+1]=examples;
}
}
这可能是你想要的。此果篮现在有一定数量的水果槽,现在您可以使用add方法向果篮中添加另一个水果。featureV是如何声明的?请发布您得到的确切错误,并指向此错误所指的源代码中的位置。还显示类型是如何声明的,例如什么是featureV?思考一下您的对象模型。集群对象包含集群对象数组没有多大意义。什么是集群?这里的想法是,类FeatureVector包含大量数据实例,集群类用于保存FeatureVector集合中的大量数据组或集群。假设:FeatureVector中有40个对象,但我希望将其分组为5个对象。因此,我将有5个集群实例存储FeatureVector中的8个对象。集群包含一个FeatureVector数组,FeatureVector包含…?上面的示例可能会起作用,但新对象是在FeatureVector下定义的,而我需要它们在集群下。因为在我的原始代码中,我试图在集群中存储FeatureVector的引用,所以它没有意义。但是,如果我有办法从FeatureVector中正确复制对象的数据,并在Cluster下创建一个全新的对象,它可能会工作,但我不知道如何做,或者是否可能。上面的示例似乎是正确的。你的评论是不可理解的。考虑重构你的类,也许你应该让自己熟悉对象和反射的继承。为什么要思考?这是一个简单的数据模型问题。我在这里甚至看不到任何继承要求,除非FeatureVector继承自某个vector类,在这种情况下,它更可能只是一个vector类,例如ArrayList。没有vector类,没有ArrayList。非常感谢您的回复。这非常有帮助。我只是有个问题。若我在水果类下声明一个数组水果,为什么我需要水果篮类?类的概念是保护信息,并使其对所处的环境是私有的。如果我遵循您上面提供的示例,我的水果在数据保护方面属于果篮还是水果?私家水果[]水果;在果篮里还是在水果里?再次感谢你。你帮了大忙。数据保护不是课程中最重要的部分。类更多的是将属于一起的东西打包在一起。举个例子:一个水果由多个水果组成,这有意义吗?如果是这样的话,请继续,我会的
如果不是,则将水果数组打包到另一个类中,该类由水果组成/包含水果。关于第二个问题:必须区分对象和引用。对象是内存中数据的特定表示形式。引用是指向该对象的变量。参考水果将仅对水果篮可见,对象将对所有人可见。因此,如果您为同一水果提供两个不同的对象引用,则两个对象都将能够访问水果。示例:水果苹果=新水果;果篮basketA=新果篮;果篮篮B=新果篮;苹果树;篮子b.苹果;现在苹果将在两个篮子的水果阵列中。两个篮子都可以进入苹果。但参考私有水果[]水果将无法从外部果篮从其他类别访问。水果[0]=苹果;行不通