Проверка, если массив подмножена другого массива. Джава

StackOverflow https://stackoverflow.com/questions/4090501

  •  28-09-2019
  •  | 
  •  

Вопрос

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

Для этого назначения я должен проверить, первые 20 номеров из массива A - это подмножество первых 20 номеров AF AF AF 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;
    }
   }

  } 
 }


}

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

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

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

РЕДАКТИРОВАТЬ:

Это проблема проблема:

если (verzameling.a.elementen [i] == verzameling.b.elementen [j])

Спасибо за комментарий, однако это все еще ошибочно, когда я компилирую. Он говорит, что не может найти символ о Verzameling.a.elementen, i, verzameling.b.elementen и j. Я думаю, что я называю это неправильно, это нормально, чтобы позвонить в переменной, говоря: ClassName.ObjectName.Variable от объекта?

Это было полезно?

Решение

Ваше, если заявление отдано:

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] не нулевой, если вы используете метод равенства. Также обратите внимание, что для номеров == в порядке, но для объектов, которые вы хотите использовать, если вы не уверены, что хотите == (== означает что-то очень специфичное для объектов)

Preditit -

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

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

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


}

Другие советы

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

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

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

или

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

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

должно быть:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top