التحقق مما إذا كانت الصفيف هي مجموعة فرعية من مجموعة أخرى. جافا

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

  •  28-09-2019
  •  | 
  •  

سؤال

لا بد لي من صنع مجموعة من 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 ().

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top