2017-01-12 3 views
2

Wir lernen Arrays in der Klasse und mir wurde dieses Programmierprojekt zugewiesen. Ich habe den Code bisher so weit geschrieben, aber ich bin verwirrt darüber, wie man es richtig machen kann. Ich soll eine for-Schleife mit einer System.out.println-Anweisung für meinen Code verwenden.Odds & Evens Array Instantiierung

Instanziieren Sie ein Array und laden Sie es mit Werten. Schreiben Sie Methoden, um zu bestimmen, wie viele der Werte im Array ungerade sind und wie viele gerade sind. Die Verfahren sollten Arrays zurück, die die Odds enthalten und nivelliert

Sample Data : 
2 4 6 8 10 12 14 
1 2 3 4 5 6 7 8 9 
2 10 20 21 23 24 40 55 60 61 

Sample Output : 
Odds - [] 
Evens - [2, 4, 6, 8, 10, 12, 14] 
Odds - [1, 3, 5, 7, 9] 
Evens - [2, 4, 6, 8] 
Odds - [21, 23, 55, 61] 
Evens - [2, 10, 20, 24, 40, 60] 

Hier ist mein Code:

public class OddEvensHW { 

public static void main(String[] args){ 

    int x = 0; 
    int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 

    System.out.println("Even : "); 
    for (x = 0; x < numbers.length; x++); 
    { 
     if(numbers[x]%2 == 0){ 
      int even = numbers[x]; 
      System.out.print (even + "\t"); 
     } 
     else { 
     } 

     System.out.println(numbers[x] + " "); 

    } 

    // odds now 
    System.out.println("Odds : "); 
    for (x = 0; x < numbers.length; x++); 
    { 
     if(numbers[x]%2 != 0){ 
      int odd = numbers[x]; 
      System.out.print (odd + "\t"); 
     } 
     else { 
     }   
    } 
    System.out.println(numbers[x] + " "); 
} 

Antwort

1

Ihr Problem liegt hier: for (x = 0; x < numbers.length; x++); Das Semikolon am Ende beendet die Anweisung, so dass die Schleife im Grunde nichts weiter tut außer inkrementieren x. Nach dieser Schleife endet x hat Wert numbers.length (was in diesem Fall 20 ist), also wenn Sie if (numbers[x] % 2 == 0) { erreichen, erhalten Sie die ArrayIndexOutOfBoundsException, weil numbers[20] außerhalb der Grenzen liegt. Um dies zu beheben, entfernen Sie einfach die ; aus jeder for Schleife.

Für Ihre Aufgabe sollten Sie Methoden schreiben die Arrays mit allen ungeraden und geraden Zahlen zurückkehren . Also im Grunde müssen Sie zwei Methoden haben, eine für Odds und eine für Evens.

mit zu beginnen, sollten sie in etwa so aussehen:

public static int[] odds(int[] input) { 
    int count = 0; 
    //insert logic to count the odds in the input 
    int[] odds = new int[count]; 

    // insert logic to fill the "odds" array with the odd values from "input" 
    return odds; 
} 
public static int[] evens(int[] input) { 
    // analogous 
} 

, dass Sie eine Basis weiter geben sollte.

1

Die Methoden sollten Arrays zurück, die die Chancen enthalten und nivelliert

Du gibst nichts zurück.

1) Sie sollten zwei Arrays (ungerades Array und gerades Array) zurückgeben, die in einem Array enthalten sind. Das Problem ist, dass Sie nicht vorher wissen können, um die Größe jedes Arrays zu iterieren und dass ein Array nicht dynamisch erweiterbar ist.
Sie könnten die beiden Arrays mit der Größe des ursprünglichen Arrays initialisieren. Die verbleibenden Elemente sind null. Eine andere Lösung besteht darin, ein erstes Mal zu iterieren, um ungerade und gerade Elemente zu zählen, und die Arrays unter Verwendung dieser Informationen zu instanziieren und dann erneut auf das anfängliche Array zu iterieren, um die zwei Arrays zu füllen.

2) Sie müssen das ursprüngliche Array nicht zweimal durchlaufen: einmal mit ungeraden Werten und einmal mit geraden Werten.
Sie sollten lieber die beiden Fälle (ungerade und gerade) während einer einzelnen Schleife behandeln.

1

Sie erhalten

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20 

Dies ist, weil Sie in den paar for Schleifen, die Schleifen bis läuft, x < numbers.length

numbers.length gives you the total number of entries in array. So in this case its 20, but the last index is 19 (it starts from 0 and ends at 19). Index 20 doesn't exist at all. Thus the `ArrayIndexOutOfBoundsException` 

diesem, einfache Änderung der for-for (x = 0; x < numbers.length - 1; x++) sowohl zu beheben Gerade und ungerade Fälle.

So kann Ihr Code wie folgt aussieht:

public class OddEvensHW { 
public static void main(String[] args) { 

    int x = 0; 
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 }; 

    System.out.println("Even : "); 
    for (x = 0; x < numbers.length - 1; x++) 

    { 
     if (numbers[x] % 2 == 0) { 
      int even = numbers[x]; 
      System.out.print(even + "\t"); 
     } 

    } 

    // odds now 
    System.out.println("Odds : "); 
    for (x = 0; x < numbers.length - 1; x++) 

    { 
     if (numbers[x] % 2 != 0) { 
      int odd = numbers[x]; 
      System.out.print(odd + "\t"); 
     } 
    } 

} 

} 

Hoffe, es hilft!

2

für (x = 0; x < numbers.length; x ++); ist falsch, Sie müssen das ";"

1

Hier, was Sie tun können, da Ihre Schleife falsch war, wurde es nicht tatsächlich ausgeführt. Wenn dies der Fall ist, können Sie Daten auf einmal in einer einzigen Schleife sammeln, anstatt auf 2, da eine der beiden Zahlen ungerade/gerade ist, wenn keine andere Möglichkeit besteht. So, if-else wird die Arbeit tun

int x = 0; 
    int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 

    String even=""; 
    String odd=""; 

    for(;x<numbers.length;x++){ 
     if(numbers[x]%2 == 0){ 
      even += numbers[x] + ", "; 
     } 
     else { 
      odd += numbers[x] + ", "; 
     } 
    } 

    System.out.println("Even ="+even); 
    System.out.println("odd ="+odd); 
Verwandte Themen