2010-11-03 21 views
4

Je dois faire un tableau de 100 nombres et ensuite mélanger aléatoirement les 20 premiers pour avoir 2 tableaux différents; A et B.Vérification si le tableau est un sous-ensemble d'un autre tableau. Java

Pour cette mission, je dois vérifier wether les 20 premiers numéros de tableau A sont un sous-ensemble des 20 premiers numéros af Tableau B

Jusqu'à présent, j'ai ceci:

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

    } 
} 


} 

Cependant, cela ne fonctionne pas du tout parce que je ne peux pas comprendre comment comparer l'élément [i] de l'objet A à l'élément [j] de l'objet B. Comment comparer les différents éléments des deux objets en utilisant la méthode statique la même classe.

(So Verzameling A et B sont les deux instances de la classe Verzameling, avec une méthode statique pour vérifier si A est sous-ensemble de B. Comment puis-je obtenir les chiffres dans le tableau de Verzameling A et B?)

Si quelque chose n'est pas clair s'il vous plaît faites le moi savoir! Je n'ai pas besoin de solutions entières, juste comment je peux accéder à la valeur de elementen [i] à partir de l'objet A et B. merci!

EDIT:

c'est la ligne de problème:

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

merci pour le commentaire, Cependant, il est toujours erroné quand je compile. Il dit qu'il ne peut pas trouver le symbole de verzameling.a.elementen, i, verzameling.b.elementen et j. Je pense que je le nomme mal, est-ce correct d'appeler la variable en disant: classname.objectname.variable d'objet?

+0

merci @ hvgotcodes pour l'édition de la mise en page, je ne semble jamais le faire fonctionner? comment faites-vous? – Javaaaa

+0

Avez-vous copié et collé avec ce code? Ou tapez-le dans SO? Vous ne devriez pas avoir un seul '='; il devrait être '=='. Mais ensuite, il ne compilerait pas, alors cela ne vous aidera probablement pas. –

+0

@ javaa, j'ai utilisé l'icône de formatage du code dans l'éditeur - c'est un tas de 1 et 0. – hvgotcodes

Répondre

2

votre instruction if est pillée:

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

vous faites affectation, vous n'êtes pas tout tester.

essayer

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

ou

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

Notez que vous devez vous assurer Verzameling.a.elementen [i] est non nulle si vous utilisez la méthode equals. A noter également que pour les nombres == est ok, mais pour les objets que vous souhaitez utiliser est égal à moins que vous êtes sûr que vous voulez == (== signifie quelque chose de très spécifique pour les objets)

préédition -

Votre code est ne pas compiler pour quelques raisons. Le premier est que vos variables a et b sont déclarées dans la portée de main, donc elles ne sont accessibles que dans main. Les déplacer vers la classe et les rendre publics et statiques signifie qu'ils peuvent être accessibles de n'importe où.

EDIT - Je ne peux pas croire Im faire les devoirs de quelqu'un, mais - cela ne fonctionne pas, mais au moins il compile

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


} 
+0

merci pour le commentaire, mais il est toujours une erreur quand je compile. Il dit qu'il ne peut pas trouver le symbole de verzameling.a.elementen, i, verzameling.b.elementen et j. Je pense que je le nomme mal, est-ce correct d'appeler la variable en disant: classname.objectname.variable d'objet? – Javaaaa

+0

@javaaaa si l'objet est statique et la variable est publique – hvgotcodes

+0

l'objet ne peut pas être statique droit? la méthode static boolean deelVerzameling est statique, mais les objets ne peuvent pas être statiques par définition, n'est-ce pas? – Javaaaa

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

est d'attribuer, non COMPAING.Je suppose que vous voulez ==, mais une option evenbetter plût à remplacer les égaux()

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

ou

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

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

devrait être:

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

merci pour le commentaire, mais il est toujours une erreur quand je compile. Il dit qu'il ne peut pas trouver le symbole de verzameling.a.elementen, i, verzameling.b.elementen et j. Je pense que je le nomme mal, est-ce correct d'appeler la variable en disant: classname.objectname.variable d'objet? – Javaaaa

0

Trier chacun des réseaux, comparer. Ou mieux encore, mettez les entiers dans un type de set, et vérifiez si l'un est un sous-ensemble de l'autre. Recherchez l'interface Set, utilisez la méthode containsAll().