我必须制作一个包含100个数字的数组,然后将前20个数字随机地移动以拥有2个不同的数组; A和B.
对于这项任务,我必须检查阵列A中的前20个数字是否是前20个数字中的一个子集阵列B
到目前为止,我有这个:
import java.util.Random;
public class opgave6 {
public static void main(String[] args){
Verzameling a = new Verzameling(20, 3);
Verzameling b = new Verzameling(20, 4);
System.out.println(Verzameling.deelverzamelingVan());
}
}
class Verzameling {
int[] elementen;
int elementen2;
static int aantal2;
Verzameling(int aantal , int seed) {
elementen = new int[100];
int aantal2 = aantal;
for(int i = 0; i < 100; i++){
elementen[i] = i;
}
Random random1 = new Random(seed);
for(int i = 0; i < 100; i++){
int r = random1.nextInt(100);
int temp;
temp = elementen[i];
elementen[i] = elementen[r];
elementen[r] = temp;
}
printVerzameling(aantal);
}
Verzameling(int seed) {
}
void printVerzameling(int aantal){
for (int i = 0; i < aantal; i++){
System.out.print(elementen[i] + " ");
}
System.out.println();
}
static boolean deelverzamelingVan() {
while (true) {
for(i = 0; i < aantal2; i++){
for(j = 0; j < aantal2; j++){
if(Verzameling.a.elementen[i] = Verzameling.b.elementen[j])
break;
}
}
}
}
}
然而,它根本不起作用,因为我无法弄清楚如何将对象A中的elemen [i]与对象B中的元素[j]进行比较。如何使用静态方法比较两个对象中的不同元素在同一个班级。
(所以Verzameling A和B都是Verzameling类的实例,用静态方法检查A是否是B的子集。如何从Verzameling A和B中获取数组中的数字?)
如果不清楚,请告诉我!我不需要整个解决方案,只需要如何从对象A和B中访问elementen [i]的值。谢谢!
编辑:
这是问题:
if(Verzameling.a.elementen [i] == Verzameling.b.elementen [j])
感谢您的评论,但是当我编译时它仍然是错误的。它说它无法找到关于verzameling.a.elementen,i,verzameling.b.elementen和j的符号。我想我命名错了,通过说:classname.objectname.variable对象来调用变量是否可以?
答案 0 :(得分:2)
你的if语句被抬高了:
if(Verzameling.a.elementen[i] = Verzameling.b.elementen[j])
你正在做作业,你没有测试任何东西。
试
Verzameling.a.elementen[i].equals(Verzameling.b.elementen[j])
或
Verzameling.a.elementen[i] == Verzameling.b.elementen[j]
请注意,如果使用equals方法,则需要确保Verzameling.a.elementen [i]不为null。另请注意,对于数字==是好的,但对于您想要使用等于的对象,除非您确定要==(==表示对象非常具体)
PREEDIT -
由于某些原因,您的代码无法编译。第一个是你的a和b变量在main的范围内声明,所以它们只能在main中访问。将它们移到课堂上并将它们公开和静态意味着可以从任何地方访问它们。
编辑 - 我不敢相信我在做某人的作业,但是 - 这不起作用,但至少它编译
import java.util.Random;
public class opgave6 {
public static Verzameling a = new Verzameling(20, 3);
public static Verzameling b = new Verzameling(20, 4);
public static void main(String[] args) {
System.out.println("before something");
System.out.println(Verzameling.deelverzamelingVan());
System.out.println("after something");
}
}
class Verzameling {
int[] elementen;
int elementen2;
static int aantal2;
Verzameling(int aantal, int seed) {
elementen = new int[100];
int aantal2 = aantal;
for (int i = 0; i < 100; i++) {
elementen[i] = i;
}
Random random1 = new Random(seed);
for (int i = 0; i < 100; i++) {
int r = random1.nextInt(100);
int temp;
temp = elementen[i];
elementen[i] = elementen[r];
elementen[r] = temp;
}
printVerzameling(aantal);
}
// you arent using it -- do so or delete it
Verzameling(int seed) {
}
void printVerzameling(int aantal) {
for (int i = 0; i < aantal; i++) {
System.out.print(elementen[i] + " ");
}
System.out.println();
}
static boolean deelverzamelingVan() {
for (int i = 0; i < aantal2; i++) {
for (int j = 0; j < aantal2; j++) {
int aElementen = opgave6.a.elementen[i];
int bElementen = opgave6.b.elementen[j];
System.out.println(String.format("Comparing a[i] to b[i] [%d, %d]", aElementen, bElementen));
if (aElementen == bElementen)
break;
}
}
// need to return something, i dont know what.
return true;
}
}
答案 1 :(得分:1)
if(Verzameling.a.elementen[i] = Verzameling.b.elementen[j])
是分配,而不是兼容。我想你想要==,但更好的选择会覆盖equals()
if(Verzameling.a.elementen[i] == Verzameling.b.elementen[j])
或
if(Verzameling.a.elementen[i].equals(Verzameling.b.elementen[j]))
答案 2 :(得分:0)
Verzameling.a.elementen [i] = Verzameling.b.elementen [j]
应该是:
Verzameling.a.elementen[i] == Verzameling.b.elementen[j]
答案 3 :(得分:0)
对每个数组进行排序,比较。或者更好的是,将整数放入集合类型,并检查一个是否是另一个的子集。查找Set接口,使用containsAll()方法。