Проверка, если массив подмножена другого массива. Джава
Вопрос
Я должен сделать массив из 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 ().