التحقق مما إذا كانت الصفيف هي مجموعة فرعية من مجموعة أخرى. جافا
سؤال
لا بد لي من صنع مجموعة من 100 رقم ثم خلط أول 20 العشرين بشكل عشوائي للحصول على صفيفتين مختلفتين ؛ أ و ب.
بالنسبة لهذه المهمة ، يجب أن أتحقق من أول 20 رقمًا من Array A هي مجموعة فرعية من أول 20 رقمًا
حتى الآن لدي هذا:
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. شكرًا!
تعديل:
هذا هو خط المشكلة:
if (verzameling.a.elementen [i] == Verzameling.B.Elementen [J])
شكرًا على التعليق ، ومع ذلك لا يزال يخطئ عندما أقوم بتجميع. تقول أنه لا يمكن العثور على رمز حول verzameling.a.elementen ، أنا ، verzameling.b.elementen و j. أعتقد أنني أسميها بشكل خاطئ ، هل من المقبول الاتصال بالمتغير بالقول: className.ObjectName.varable of Object؟
المحلول
إن البيان الخاص بك قد تم ربطه:
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] ليس فارغًا إذا كنت تستخدم طريقة متساوية. لاحظ أيضًا أنه بالنسبة للأرقام == على ما يرام ، ولكن بالنسبة للكائنات التي تريد استخدامها متساوية إلا إذا كنت متأكدًا أنك تريد == (== يعني شيئًا محددًا جدًا للكائنات)
Preedit -
لا يتم تجميع الكود الخاص بك لعدة أسباب. أولها هو أن متغيرات 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])
هو تعيين ، وليس compaing. أفترض أنك تريد == ، لكن خيار التوقيت سيتخطى المساواة ()
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]
فرز كل من المصفوفات ، قارن. أو الأفضل من ذلك ، ضع الأعداد الصحيحة في نوع مجموعة ، وتحقق مما إذا كان أحدهم مجموعة فرعية من الآخر. ابحث عن واجهة تعيين ، استخدم طريقة ContaLeAll ().