2010-11-03 3 views
4

Я должен сделать массив из 100 чисел, а затем случайным образом перетасовать первые 20, чтобы иметь 2 разных массива; А и Б.Проверка, является ли массив подмножеством другого массива. Java

Для этого задания я должен проверить погоду первые 20 номеров из массива A не являются подмножеством первые 20 номеров аф массива B

До сих пор у меня есть это:

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

    } 
} 


} 

Однако, это не работает вообще, потому что я не могу понять, как сравнить элемент [i] с объектом A с элементом [j] из объекта B. Как я могу сравнить разные элементы обоих объектов с помощью статического метода в тот же класс.

(Так Verzameling А и В оба экземпляра класса Verzameling, статический метод, чтобы проверить, если А подмножество В. Как я могу получить номера в массиве из Verzameling А и В?)

Если что-то неясно, пожалуйста, дайте мне знать! Мне не нужны целые решения, как я могу получить доступ к значению elementen [i] из объектов A и B. спасибо!

EDIT:

это проблема линии:

если (Verzameling.a.elementen [я] == Verzameling.b.elementen [у])

спасибо за комментарий, однако при компиляции все еще ошибка. В нем говорится, что он не может найти символ о verzameling.a.elementen, i, verzameling.b.elementen и j. Я думаю, что я назвал это неправильным, нормально ли вызывать переменную, говоря: classname.objectname.variable объекта?

+0

thanks @ hvgotcodes для редактирования макета, я никогда не заставляю его работать? как ты делаешь это? – Javaaaa

+0

Вы скопировали и вставляли этот код? Или введите его в SO? У вас не должно быть ни одного '='; он должен быть '=='. Но тогда он не будет компилироваться, так что, вероятно, вам это не поможет. –

+0

@javaa, я использовал значок форматирования кода в редакторе - его пучок из 1 и 0. – hvgotcodes

ответ

2

ваш, если заявление козлы:

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] 

к сведению, что вам нужно будет убедиться, что Verzameling.a.elementen [I] не равно нулю, если вы используете метод Equals. Также отметим, что для чисел == это нормально, но для объектов, которые вы хотите использовать равно, если вы не уверены, что вы хотите == (== означает что-то очень специфическое для объектов)

PREEDIT -

Ваш код не компилируясь по нескольким причинам. Первым из них является то, что ваши переменные a и b объявлены в области main, поэтому они доступны только в основном. Перемещение их к классу и их публикация и статичность означают, что к ним можно получить доступ из любого места.

EDIT - Я не могу поверить, что Im делает чью-то домашнюю работу, но - это не работает, но, по крайней мере, он компилирует

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

спасибо за комментарий, однако это ошибка при компиляции. В нем говорится, что он не может найти символ о verzameling.a.elementen, i, verzameling.b.elementen и j. Я думаю, что я назвал это неправильным, нормально ли вызывать переменную, говоря: classname.objectname.variable объекта? – Javaaaa

+0

@javaaaa, если объект является статическим, а переменная является общедоступной – hvgotcodes

+0

объект не может быть статическим? метод static boolean deelVerzameling является статичным, но объекты не могут быть статическими для определения справа? – Javaaaa

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

является назначение, не compaing.Я полагаю, вы хотите ==, но вариант evenbetter бы переопределить Equals()

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

или

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

Verzameling.a.elementen [я] = Verzameling.b.elementen [J]

должно быть:

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

спасибо за комментарий, однако это ошибка при компиляции. В нем говорится, что он не может найти символ о verzameling.a.elementen, i, verzameling.b.elementen и j. Я думаю, что я назвал это неправильным, нормально ли вызывать переменную, говоря: classname.objectname.variable объекта? – Javaaaa

0

Сортировка каждого из массивов, сравнения. Или еще лучше, поместите целые числа в заданный тип и проверьте, является ли это подмножеством другого. Найдите интерфейс Set, используйте метод containsAll().