2010-11-03 56 views
4

我必須製作一個100個數字的數組,然後隨機隨機洗牌20個,以擁有2個不同的數組; A和B檢查數組是否是其他數組的子集。 Java

對於這個任務,我不得不請檢查是否從陣列中的第20號是第20號AF數組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; 
    } 
    } 

    } 
} 


} 

但是,它根本不起作用,因爲我無法弄清楚如何將對象A中的elementen [i]與對象B中的元素[j]進行比較。如何通過使用靜態方法比較兩個對象中的不同元素同一班。

(所以Verzameling A和B是Verzameling類的兩個實例,用靜態方法如何從Verzameling A和B在陣列中得出的數字,以檢查是否A是B的子集?)

如果有什麼不清楚請讓我知道!我不需要完整的解決方案,只需要從對象A和B中獲取elementen [i]的價值,謝謝!

編輯:

這就是問題所在行:

如果(Verzameling.a.elementen [I] == Verzameling.b.elementen [j]的)

感謝您的評論,但是當我編譯時它仍然是錯誤的。它說它無法找到有關verzameling.a.elementen,i,verzameling.b.elementen和j的符號。我想我命名它錯了,可以通過說:objectname.objectname.variable來調用變量嗎?

+0

感謝@ hvgotcodes的佈局編輯,我似乎從來沒有得到它的工作?你怎麼做呢? – Javaaaa 2010-11-03 18:51:27

+0

您是否複製並粘貼了這段代碼?或者在SO中鍵入?你不應該有一個'=';它應該是'=='。但是,它不會編譯,所以這可能不會幫助你。 – 2010-11-03 18:51:28

+0

@javaa,我在編輯器中使用了代碼格式化圖標 - 它是一堆1和0。 – hvgotcodes 2010-11-03 18:54:10

回答

2

你的if語句擡高:

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

你在做任務,你是不是測試什麼。如果您使用equals方法

嘗試

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

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

請注意,您需要確保Verzameling.a.elementen [i]是不是空。還要注意的是對數字==是好的,但您要使用對象等於,除非你確信你想==(==表示非常具體的對象的東西)

預編輯 -

你的代碼不是因爲幾個原因而編譯的。第一個是你的a和b變量是在main範圍內聲明的,所以它們只能在main中訪問。將它們移動到課堂並使其公開和靜態意味着可以從任何地方訪問它們。

編輯 - 我不能相信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的符號。我想我命名它錯了,可以通過說:objectname.objectname.variable來調用變量嗎? – Javaaaa 2010-11-03 23:30:32

+0

@javaaaa如果對象是靜態的並且變量是公開的 – hvgotcodes 2010-11-03 23:34:34

+0

對象不能靜態對嗎?方法靜態布爾deelVerzameling是靜態的,但對象不能靜態定義每個權利? opgave63.java:64:找不到符號 符號:變量b 位置:類Verzameling 如果(Verzameling.a.elementen [I] = Verzameling.b.elementen – Javaaaa 2010-11-03 23:53:42

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 [i] = Verzameling.b.elementen [J]。

應該是:

每個陣列
Verzameling.a.elementen[i] == Verzameling.b.elementen[j] 
+0

感謝您的評論,但它仍然是錯誤的,當我編譯。它說它無法找到有關verzameling.a.elementen,i,verzameling.b.elementen和j的符號。我想我命名它錯了,可以通過說:objectname.objectname.variable來調用變量嗎? – Javaaaa 2010-11-03 23:31:06

0

排序,進行比較。或者更好的辦法是將整數放入一個集合類型中,並檢查一個是否是另一個的子集。查找Set接口,使用containsAll()方法。

相關問題