题
我必须制作100个数字的数组,然后随机将前20个随机洗牌以具有2个不同的数组。 A和B。
对于此作业,我必须检查数组a的前20个数字是前20个数字AF数组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;
}
}
}
}
}
但是,它根本不起作用,因为我无法弄清楚如何将元素[i]从对象A到元素[j]从对象B进行比较。班级。
(因此,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.b.lementen和j的符号。我认为我命名错误了,可以通过说:className.ObjectName.able对象来调用变量吗?
解决方案
您的如果声明被抬起来:
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]不是零。另请注意,对于数字==是可以的,但是对于要使用等值的对象,除非您确定要==(==(==)表示对象非常特定的东西)
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;
}
}
其他提示
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]))
verzameling.a.elementen [i] = verzameling.b.elementen [j
应该:
Verzameling.a.elementen[i] == Verzameling.b.elementen[j]
对每个数组进行排序,比较。或者更好的是,将整数放入集合类型,并检查一个是另一个子集。查找设置接口,使用containsall()方法。