Pregunta

I tiene que hacer una serie de 100 números y luego baraja la primera 20 al azar para tener 2 arrays diferentes; A y B.

En esta asignación tengo que comprobar wether los primeros 20 números de Array A son un subconjunto de los primeros 20 números af Array B

Hasta ahora tengo esto:

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

  } 
 }


}

Sin embargo, no funciona en absoluto, porque no puedo encontrar la manera de comparar la elementen [i] del objeto A con el elemento [j] del objeto B. ¿Cómo puedo comparar los diferentes elementos de ambos objetos mediante el método estático en la misma clase.

(Así Verzameling A y B son ambas instancias de la clase Verzameling, con un método estático para comprobar si A es subconjunto de B. ¿Cómo puedo obtener los números de la matriz a partir de Verzameling A y B?)

Si algo no está claro por favor hágamelo saber! No necesito soluciones integrales, lo que puedo acceder al valor de elementen [i] del objeto A y B. Gracias!

EDIT:

esta es la línea problema:

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

Gracias por el comentario, sin embargo, está todavía erroring cuando compilo. Se dice que no puede encontrar el símbolo sobre verzameling.a.elementen, i, verzameling.b.elementen j. Creo que estoy nombrando mal, ¿está bien llamar a la variable diciendo: classname.objectname.variable del objeto?

¿Fue útil?

Solución

Si su declaración es jacked:

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

que está haciendo la asignación, no está probando nada.

try

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

o

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

Tenga en cuenta que tendrá que asegurarse de Verzameling.a.elementen [i] no es nulo si se utiliza el método es igual. También tenga en cuenta que los números == está bien, pero para los objetos que desea utilizar es igual a menos que esté seguro de que deseas == (== significa algo muy específico para los objetos)

preedición -

El código no está compilando por varias razones. La primera de ellas es que las variables a y b se declaran en el ámbito de principal, por lo que sólo se puede acceder en el principal. Moviéndolos hacia arriba a la clase y hacer que los medios públicos y estáticos que pueden accederse desde cualquier lugar.

EDITAR - no puedo creer que estoy haciendo la tarea de alguien, pero - esto no funciona, pero al menos se 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;
    }


}

Otros consejos

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

es la asignación, no compaing. Supongo que quiere ==, sino una opción evenbetter haría a sobrescribir los métodos 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]

debería ser:

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

Clasificar cada una de las matrices, compara. O mejor aún, poner los números enteros en un tipo de lance, y comprobar si uno es un subconjunto del otro. Busque la interfaz conjunto, utilice el método containsAll ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top