配列が他のアレイのサブセットであるかどうかを確認します。ジャワ
質問
100の数字の配列を作成し、最初の20をランダムにシャッフルして、2つの異なる配列を持つ必要があります。 AとB
この割り当てでは、アレイAからの最初の20の数値をチェックする必要があります。
今まで私はこれを持っています:
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からオブジェクトBの要素[j]までelementen [i]を比較する方法を理解できないため、まったく機能しません。クラス。
(したがって、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 offer?
解決
あなたの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ではないことを確認する必要があることに注意してください。また、numbers ==の場合はOKですが、オブジェクトの場合、==(==はオブジェクトに非常に具体的なものを意味すると確信していない限り等しくなります)
PREEDIT-
コードはいくつかの理由でコンパイルされていません。最初は、AとB変数がメインの範囲で宣言されているため、メインでのみアクセスできることです。それらをクラスに移動し、それらを公開および静的にすることは、どこからでもアクセスできることを意味します。
編集 - 私は誰かの宿題をしているとは信じられませんが、これはうまくいきませんが、少なくともコンパイル
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()メソッドを使用します。