4

100個の数字の配列を作成してから、最初の20個をランダムにシャッフルして、2つの異なる配列を作成する必要があります。AとB。

この割り当てでは、配列Aの最初の20個の数値が配列Bの最初の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のelementen[i]とオブジェクトBのelement[j]を比較する方法がわからないため、まったく機能しません。同じ静的メソッドを使用して、両方のオブジェクトの異なる要素を比較するにはどうすればよいですか。クラス。

(したがって、Verzameling AとBは両方ともVerzamelingクラスのインスタンスであり、AがBのサブセットであるかどうかを確認する静的メソッドがあります。VerzamelingAと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?

4

4 に答える 4

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でないことを確認する必要があることに注意してください。また、数値の場合は==で問題ありませんが、使用するオブジェクトの場合は、==が必要であることが確実でない限り、equalsを使用することに注意してください(==はオブジェクトに非常に固有の何かを意味します)

事前編集-

いくつかの理由で、コードがコンパイルされていません。1つ目は、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;
    }


}
于 2010-11-03T18:51:28.510 に答える
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]))
于 2010-11-03T18:52:53.323 に答える
0

Verzameling.a.elementen [i] = Verzameling.b.elementen [j]

する必要があります:

Verzameling.a.elementen[i] == Verzameling.b.elementen[j]
于 2010-11-03T18:53:04.930 に答える
0

各配列を並べ替えて比較します。または、整数をセットタイプに入れて、一方が他方のサブセットであるかどうかを確認することをお勧めします。Setインターフェースを検索し、containsAll()メソッドを使用します。

于 2010-11-03T19:29:22.100 に答える