Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,将对象传递给不同的类_Java_Arrays_Class_Object_Methods - Fatal编程技术网

Java,将对象传递给不同的类

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()=

我是java新手,正在努力理解面向对象编程

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

请看一下我的代码,让我知道我做错了什么

这是来自类集群的,该方法应该将类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;
编辑:

这就是集群的定义方式以及功能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]=苹果;行不通