Verificando array è sottoinsieme di un altro array. Giava
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?
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 ().