2016-04-04 16 views
1

Ich muss eine Methode erstellen, die die geraden Zahlen in einem Array kopiert und druckt, indem Sie ein neues Array erstellen. Ich habe bereits ein Array namens myNumbers erstellt. Ich denke, das Problem ist, dass myEvenNumbers[z] wird nicht eine gerade Nummer bei myEvenNumbers[0] speichern, sondern es würde was auch immer die erste gerade Zahl ist auf den ersten Index von myNumbers speichern. Jede Hilfe würde sehr geschätzt werden!Wie kann ich eine Kopie eines Arrays mit nur den geraden Zahlen erstellen?

Dies ist mein Code so weit.

public static void copyAndPrintEvenNumbers() { 
    System.out.println("All the even numbers are: "); 
    int count = 0; 

    for (int i =0; i < myNumbers.length; i++) { 
     if (myNumbers[i] % 2 == 0) { 
      count++; 
     } 
     int[] myEvenNumbers = new int[count]; 
     for (int z = 0; z < myNumbers.length; z++) { 
      if (myNumbers[z] % 2 ==0) { 
       myEvenNumbers[z] = myNumbers[z]; 
       System.out.println(myEvenNumbers[z]); 
      } 
     } 

    } 

} 
+0

Java, mein Fehler. – acho818

Antwort

1

Sie müssen einen zweiten Index für die myEvenNumbers Array deklarieren. Wenn z die Gesamtzahl der Elemente des Arrays myEvenNumbers überschreitet, erhalten Sie einen IndexOutOfBounds. Wie Connor sagte, sollten die zwei Schleifen nicht verschachtelt sein. Sonst verwerfen Sie die vorherige Array-Instanz (myEvenNumbers) und führen zu einem Speicherleck.

public static void copyAndPrintEvenNumbers() { 

    System.out.println("All the even numbers are: "); 
    int count = 0; 

    for (int i =0; i < myNumbers.length; i++) { 
     if (myNumbers[i] % 2 == 0) { 
      count++; 
     } 
    } 

    int[] myEvenNumbers = new int[count]; 
    int myEvenIndex = 0; 
    for (int z = 0; z < myNumbers.length; z++) { 
     if (myNumbers[z] % 2 ==0) { 
      myEvenNumbers[myEvenIndex] = myNumbers[z]; 
      System.out.println(myEvenNumbers[myEvenIndex]); 
      myEvenIndex++; 
     } 
    } 

} 

persönlich würde ich die gleiche Größe für die geraden Zahlen Array (ein wenig Overhead für Speicher) wählen die erste Schleife, da die Zählung der geraden Zahlen zu beseitigen nicht die Zählung des ursprünglichen Arrays nicht überschreiten kann.

public static void copyAndPrintEvenNumbers() { 

    System.out.println("All the even numbers are: "); 
    int count = 0; 

    int[] myEvenNumbers = new int[myNumbers.length]; 
    int count = 0; 
    for (int z = 0; z < myNumbers.length; z++) { 
     if (myNumbers[z] % 2 ==0) { 
      myEvenNumbers[count] = myNumbers[z]; 
      System.out.println(myEvenNumbers[count]); 
      count++; 
     } 
    } 
    System.out.println("There are " + count + " even numbers found"); 
} 
+0

Das hat sehr geholfen. Vielen Dank! – acho818

0

Ihre zweite for-Schleife muss nicht innerhalb der ersten sein. Versuchen Sie dies:

public static void copyAndPrintEvenNumbers() { 
    System.out.println("All the even numbers are: "); 
    int count = 0; 

    for (int i =0; i < myNumbers.length; i++) { 
     if (myNumbers[i] % 2 == 0) { 
      count++; 
     } 
    } 

    int[] myEvenNumbers = new int[count]; 
    int index = 0; 
    for(int i = 0; i < myNumbers.length; i++) { 
     if (myNumbers[i] % 2 ==0) { 
      myEvenNumbers[index] = myNumbers[i]; 
      index++; 
     } 
    } 
    System.out.println(myEvenNumbers); 
} 
+0

Danke! Ich wusste nicht, dass meine Loops verschachtelt waren. – acho818

Verwandte Themen