我遇到了一个问题。 我必须实现此接口:
public interface Set_of_objects {
boolean equal(Set_of_objects s);
Set_of_objects cross(Set_of_objects s);
}
实现它的类必须采用一个对象数组,并用另一个对象数组对其进行测试。如果相等,则方法“相等”应返回true(如果不相等,则应返回false),而“交叉”方法必须返回由它们共享的对象组成的对象数组。
由于该方法所需的参数类型,我甚至无法弄清楚如何比较这两个数组。
public class Object_array_test implements Set_of_objects {
Object[] x = new Object[5];
public Object_array_test (Object[] x) {
this.x = x;
}
public boolean equal(Set_of_objects s) {
return s.equals(x);
}
public cross(Set_of_objects s) {
return null;
}
}
当我这样做时,它说: “ equals()的参数类型不太可能:Object []似乎与Set_of_objects无关”
当我尝试投射时(就像我在互联网上看到的那样):
Object[] y = (Object[]) s;
我明白了: “无法从Set_of_objects投射到Object []”
我该如何解决此问题,有人可以解释一下它是如何工作的吗? 谢谢,很抱歉这个愚蠢的问题。
答案 0 :(得分:0)
A。只需尝试重新阅读您的要求(然后慢慢地:-)):
实现它的类必须采用对象的数组
方法“交叉”必须返回对象的数组
所以...都不是
boolean equal(Set_of_objects s);
也
Set_of_objects cross(Set_of_objects s);
满足您的要求-Set_of_objects
不是一个数组,而只是一个对象实现的Set_of_objects
接口。
您界面的方法签名必须看起来像
public interface Set_of_objects {
boolean equal(Set_of_objects[] s);
Set_of_objects[] cross(Set_of_objects[] s);
}
B。从另一方面来看,您可以像使用Set_of_objects
一样作为数组的持有人...但是您需要另一种方法(数组的获取器,例如getX()
)并使用它比较数组成员...
P.S。我想您会弄清楚如何遍历数组以比较对象并将它们放入另一个对象,以从cross
方法返回。
此外,在现实世界中,不建议从方法中返回数组的新实例...但是作为练习,它并不太重要。
祝你好运!
答案 1 :(得分:0)
这里似乎有一些小问题。这是一个更新的界面:
package com.simi.practice.work.PracticeWork;
import java.util.*;
import java.lang.*;
public interface Set_of_objects {
boolean equals(Object[] x, Object[] y);
Object cross(Object[] x, Object[] y);
}
在原始界面中,您没有将数组作为对象传递。您只是在传递接口“类型”。但是,您必须传递实际的Array Object才能将Array传递给类中的任何方法或构造函数。我们可以在接口中传递x对象和y对象,任何实现该接口的类显然都将使用以下方法:
package com.simi.practice.work.PracticeWork;
import java.util.*;
import java.lang.*;
public class Object_array_test implements Set_of_objects{
public boolean equals(Object[]s, Object[]t) {
String v = Arrays.toString(s);
String r = Arrays.toString(t);
if(v.equals(r)) {
return true;
}
return false;
}
public Object[] cross(Object[]s, Object[]t) {
ArrayList<Object> n = new ArrayList<Object>();
for(int x= 0; x<s.length; x++) {
if(s[x].equals(t[x])) {
n.add(s[x]);
}
}System.out.println(n.toArray());
Object[] p = n.toArray();
System.out.println(Arrays.toString(p));
return p;
}
}
在上面的代码中,您不知道将传递哪种对象,这就是我们将其转换为String的原因。如前所述,这些方法需要使用Object作为参数才能使用Arrays。简单地传递接口“类型”是行不通的。然后,在.equals()方法中,我们可以比较两个数组以查看它们是否相同。否则,代码将返回false。如果它们相同,则代码将返回true。
最后,让我们测试类和输出:
public class App {
public static void main(String... args) throws IOException, MyException{
Object_array_test test = new Object_array_test();
Object[] i = {1, 2, 3, 4};
Object[] j = {1, 2, 90, 4};
System.out.println(test.equals(j, i));
System.out.println(test.cross(i, j));
}
}
如您所见,这两个数组不相等,代码返回false。我们还从“数组”列表中创建了一个新数组,该数组返回与“数组”中相同的数字。我们返回创建的新对象,并将其也打印到控制台。
这是您的输出:
false
[Ljava.lang.Object;@7852e922
[1, 2, 4]
[Ljava.lang.Object;@4e25154f