2017-03-07 7 views
0

Ich brauche noch und Quoten sortieren Liste mit ArrayArraylist Sortierung

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Random; 

public class SortedEvensAndOdds { 

public static void main(String[] args) { 
    Random rnd = new Random(); 
    ArrayList<Integer> evenPrint = new ArrayList<Integer>(); 
    ArrayList<Integer> oddPrint = new ArrayList<Integer>(); 
    int odd[] = new int[25]; 
    int numOdd = 0; 
    int even [] = new int[25]; 
    int numEven = 0; 
    for (int i=0;i<25;i++) { 
     int num = rnd.nextInt((100 - 1) + 1) + 1; 
     if (num%2 ==0) { 
      even[numEven] = num; 
      numEven++; 
     } 
     else { 
      odd[numOdd] = num; 
      numOdd++; 
     } 
    } 
    for (int i = 0; i < even.length; i++) 
     evenPrint.add(even[i]); 
    for (int i = 0; i < even.length; i++) 
     oddPrint.add(odd[i]); 
    Collections.sort(evenPrint); 
    Collections.sort(oddPrint); 
    System.out.println("Even:"); 
    for (int i=0;i<numEven;i++) 
     System.out.print(evenPrint.get(i) + " "); 
    System.out.println("\nOdd:"); 
    for (int i=0;i<numOdd;i++) 
     System.out.print(oddPrint.get(i) + " "); 


} 
} 

das ist mein Ausgang

Even: 
0 0 0 0 0 0 0 0 0 6 6 14 28 36 38 54 
Odd: 
0 0 0 0 0 0 0 0 0 

Wie verhindere ich alle 0'en

btw, wenn ich aus nehmen die "Collections.sort()" Methode wird es sein

Even: 
16 32 22 54 90 70 50 60 40 12 60 78 86 52 
Odd: 
59 35 53 35 87 67 75 33 75 59 87 

so sagt dies mir, dass somthing falsch läuft mit der Sortieranlage bitte

Antwort

3

Wenn Sie ein Array wie dieses erstellen: int odd[] = new int[25]; was Sie bekommen, ist es ein Array von Nullen, 25 von ihnen. Das liegt daran, dass int nicht null sein kann.

Wenn Sie also alle Nullen am Ende des Arrays sortieren, werden sie an den Anfang des Arrays verschoben. vor 1,5,9,13,19,0,0,0,0 wurde 0,0,0,0,1,5,9,13,19 sortiert und weil man nur zu indizieren drucken, wo Sie wissen, dass Sie die Nummer dort

for (int i=0;i<numEven;i++) 
    System.out.print(evenPrint.get(i) + " "); 

Hinweis numEven assiged. Es wird nicht das gesamte Array gedruckt. Um ganze Reihe zu drucken sollten Sie lieber verwenden:

for (int i = 0; i < evenPrint.size(); i++) 
    System.out.print(evenPrint.get(i) + " "); 

Sie werden so etwas wie dieses:

0 0 0 0 0 0 0 0 0 0 0 0 10 32 32 38 40 50 60 64 70 74 82 88 96

Wie dies zu verhindern?

Legen Sie nicht jedes einzelne Arrayelement in die Liste. Wechsel:

for (int i = 0; i < even.length; i++) 
    evenPrint.add(even[i]); 
for (int i = 0; i < even.length; i++) 
    oddPrint.add(odd[i]); 

zu:

for (int i = 0; i < numEven; i++) 
    evenPrint.add(even[i]); 
for (int i = 0; i < numOdd; i++) 
    oddPrint.add(odd[i]); 
1

Die 2-Schleifen for (int i = 0; i < even.length; i++) helfen: Statt even.length verwenden Sie numEven und numOdd verwenden sollte, da Sie nur die Menge der geraden und ungeraden Nummern hinzufügen möchten Sie habe gefunden. Dadurch werden Nullen gelöscht (wenn Sie die Arrays odd und even initialisieren, sind diese mit Nullen gefüllt, die Sie den Arrays evenPrint und evenOdd hinzufügen). Wenn Sie sortieren, gehen alle Nullen an den Anfang, was nicht passiert, wenn Sie nicht sortieren.

1

Wenn Sie die int odd[] und int even[] Arrays in Ihrem Code an andere Stelle nicht verwenden, als Sie loszuwerden, die mystischen Nullen erhalten durch die Arrays völlig weggelassen wird. Sie werden kürzer - Hexe ist immer nett - und lesbarer Code.

Also wenn es möglich ist, würde ich die zufällig generierten Nummern zu den Listen direkt hinzufügen.

public static void main(String[] args) { 
    Random rnd = new Random(); 

    ArrayList<Integer> evenPrint = new ArrayList<Integer>(); 
    ArrayList<Integer> oddPrint = new ArrayList<Integer>(); 

    for (int i = 0; i < 25; i++) { 
     int num = rnd.nextInt((100 - 1) + 1) + 1; 

     if (num % 2 == 0) { 
      evenPrint.add(num); 
     } 
     else { 
      oddPrint.add(num); 
     } 
    } 

    Collections.sort(evenPrint); 
    Collections.sort(oddPrint); 

    System.out.println("Even:"); 
    evenPrint.forEach(e -> System.out.print(e + " ")); 

    System.out.println("\nOdd:"); 
    oddPrint.forEach(e -> System.out.print(e + " ")); 
} 

Hinweis: gebraucht I lambda expressions im Abschnitt Druck zur Verkürzung.

Verwandte Themen