2010-11-03 191 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()方法。