2016-04-04 16 views
1

Yeni bir dizi oluşturarak bir dizideki çift sayıları kopyalayıp basan bir yöntem oluşturmalıyım. Zaten adında bir dizi oluşturdum. Sorun şu ki, myEvenNumbers[z], myEvenNumbers[0] numaralı numaraya çift sayı kaydetmeyecek, ancak ilk çift numaranın myNumbers ilk dizininde saklanacağı anlamına gelir. Herhangi bir yardım çok takdir edilecektir!Dizinin bir kopyasını yalnızca çift sayılarla nasıl oluşturabilirim?

Bu benim kodum şu ana kadar.

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, benim hatam. – acho818

cevap

1

Sen myEvenNumbers dizisi için ikinci bir dizin bildirmelidir. z, myEvenNumbers dizisinin toplam öğe sayısını aştığında, bir IndexOutOfBounds alırsınız. Connor'ın dediği gibi, iki döngü yuvalanmamalı. Else, önceki dizi örneğini (myEvenNumbers) iptal edersiniz ve bir bellek sızıntısına neden olur.

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

} 

Kişisel olarak çift sayılar sayısı orijinal dizinin sayısını aşan çünkü birinci döngü ortadan kaldırmak için çift sayılar dizi için aynı boyutta (bellek için küçük bir tepe) seçer.

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

Bu çok yardımcı oldu. Çok teşekkür ederim! – acho818

0

İkinci for döngüsünüzün ilk sırada olmasına gerek yoktur. Bunu deneyin:

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

Teşekkürler! Looplarımın iç içe olduğunu anlayamadım. – acho818

İlgili konular