Domanda

devo creare un array di 100 numeri e poi rimescolare il primo 20 casuale avere 2 matrici differenti; A e B.

Per questo compito devo verificato se i primi 20 numeri da array A sono un sottoinsieme dei primi 20 numeri af Array B

Fino ad ora ho questo:

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;
    }
   }

  } 
 }


}

Tuttavia, non lavorare affatto perché non riesco a capire come confrontare l'elementen [i] dalla oggetto A a elemento [j] dall'oggetto B. Come posso confrontare i diversi elementi da entrambi gli oggetti utilizzando il metodo statico nella stessa classe.

(Così Verzameling A e B sono entrambi istanze della classe Verzameling, con un metodo statico per controllare se A è sottoinsieme di B. Come posso ottenere i numeri nella matrice da Verzameling A e B?)

Se qualcosa non è chiaro per favore fatemelo sapere! Non ho bisogno di soluzioni integrali, proprio come posso accedere al valore di elementen [i] da oggetto A e B. Grazie!

EDIT:

questa è la linea problema:

if (Verzameling.a.elementen [i] == Verzameling.b.elementen [j])

Grazie per il commento, tuttavia è ancora erroring Quando compilo. Si dice che non riesce a trovare il simbolo su verzameling.a.elementen, i, verzameling.b.elementen e j. Penso di nominarlo sbagliato, è ok per chiamare la variabile dicendo: classname.objectname.variable dell'oggetto?

È stato utile?

Soluzione

la tua istruzione if viene sollevato fino:

if(Verzameling.a.elementen[i] = Verzameling.b.elementen[j])

si sta facendo l'assegnazione, non si sta testando nulla.

try

Verzameling.a.elementen[i].equals(Verzameling.b.elementen[j])

o

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

Si noti che è necessario assicurarsi che Verzameling.a.elementen [i] non è nullo se si utilizza il metodo equals. Si noti inoltre che per i numeri == è ok, ma per gli oggetti che si desidera utilizzare è uguale se non si è sicuri di voler == (== significa qualcosa di molto specifico per gli oggetti)

PREEDIT -

Il tuo codice non è la compilazione per alcuni motivi. Il primo dei quali è che il vostro A e B variabili sono dichiarate nel campo di applicazione principale, in modo che siano accessibili solo a principale. spostandole verso l'alto alla classe e che li rende mezzi pubblici e statici si può accedere da qualsiasi luogo.

Modifica - non posso credere Im fare i compiti di qualcuno, ma - questo non funziona, ma almeno si compila

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;
    }


}

Altri suggerimenti

if(Verzameling.a.elementen[i] = Verzameling.b.elementen[j])

è l'assegnazione, non COMPAING. Suppongo che si desidera ==, ma un'opzione evenbetter sarebbe ignorare le equals ()

if(Verzameling.a.elementen[i] == Verzameling.b.elementen[j])

o

if(Verzameling.a.elementen[i].equals(Verzameling.b.elementen[j]))

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

dovrebbe essere:

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

Ordina ciascuna delle matrici, confrontare. O meglio ancora, mettere i numeri interi in un tipo di set, e verificare se uno è un sottoinsieme dell'altro. Cercare l'interfaccia Set, utilizzare il metodo containsAll ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top