2016-04-03 20 views
0

Ich habe Probleme, das Array vollständig zu drucken. Der Code ist eingerichtet, um eine Sequenz von Zufallszahlen zu drucken, und die Anzahl der Zufallszahlenfolgen (1-12) soll von Benutzereingaben kommen. Allerdings kann ich nicht mehr als die erste Zufallszahl drucken. Ich habe es geschafft, die gesamte Sequenz vorher zu drucken, aber da dies eine Aufgabe ist und ich Arrays verwenden muss, funktioniert meine erste Methode nicht mehr.Array wird nicht vollständig gedruckt

import java.util.Scanner; 
import java.util.Arrays; 

public class Test4 { 
    public static void main(String[] args) { 
     int randomNumber; 
     int[] allNumbers = new int[12]; 
     Scanner keyboard = new Scanner(System.in); 

     for (int i = 1; i <= allNumbers.length; i++) { 
      allNumbers[i] = (int) (Math.random() * 999 + 1); 
      System.out.print("How many random numbers? "); 
      randomNumber = keyboard.nextInt(); 
      System.out.print("\n" + "Random numbers: "); 
      System.out.print(allNumbers[i] + " "); 
      { 
       System.out.print("\n"); 
       System.out.print("\n" + "Even numbers: " + (allNumbers[i] % 2 == 0)); 
       System.out.print("\n" + "Odd numbers: "); 
       break; 
      } 
     } 
    } 
} 

Neuer Code: Unfertige ...

* Update2: hinzugefügt Grenze keyboard.nextint.

"String-Literal ist nicht durch doppelte Anführungszeichen geschlossen" Fehler in dem Teil, wo ich versuche, Odds und Evens zu drucken.

* Update3: fester Fehler oben (verursacht durch Tippfehler).

Neues Problem: die sortierten Zahlen (ungerade/gerade) erscheinen, aber im falschen Format. Sie zeigen sich wie folgt aus: Odd: 475 Odd: 123 sogar: 62 auch: 680 auch: 870 ungerade: 457 usw. Ich möchte: Auch Zahlen: Anzahl Anzahl Anzahl Anzahl Ungerade Zahlen: Zahl nummernnummer

Suchen Sie auch nach einem Zähler, der die Anzahl der geraden/ungeraden Zufallszahlen zählt - gibt es eine Möglichkeit, all das in einem einzigen Ausdruck zu drucken? Oder muss ich zuerst eine system.out.print gefolgt von einem System-out-Druck f für den Zähler machen?

Aktualisiert Code:

import java.util.Scanner; 
import java.util.Arrays; 
public class Test7 { 


public static void main(String[] args) { 

    Scanner keyboard = new Scanner(System.in); 
    System.out.print("How many random numbers?: "); 
    int size = keyboard.nextInt(); 
    System.out.print("\n"); 
    while (size>12 || size<1); 

    int[] randNum = new int[size]; 

    for(int i = 0 ; i < randNum.length ; i++) 
     randNum[i] = (int)(Math.random() * 999 + 1); 
    System.out.println("Random numbers: " + Arrays.toString(randNum).replace("]", "").replace(",", "").replace("[", "") + "\n"); 


    for(int i = 0 ; i < randNum.length ; i++) 
    if(randNum[i] % 2 == 0) { 
    System.out.print("\r" + "Even numbers: "); 
    System.out.print(randNum[i] + " "); 
    } else { 
    System.out.print("\r" + "Odd numbers: "); 
    System.out.print(randNum[i] + " "); 
    } 


}} 
+1

, die wegen der Unterbrechung ist; Am Ende der for-Schleife gibt es aber noch mehr Semantikprobleme – Pooya

Antwort

2

Java-Arrays verwendet Null basierenden Index.

for(int i = 0; i < allNumbers.length ; i++) 

Daher sollte die for-Schleife wie oben sein. Sie sollten ArrayIndexOutOfBoundException andernfalls erhalten.

Die Anweisung break, die Sie in die for-Schleife eingefügt haben, führt dazu, dass die Schleife nicht mehr als einmal ausgeführt wird. Sie sollten immer eine Pause Aussage mit einer Bedingung verwenden (zB: in einem if-Block)

+0

Ich habe das bearbeitet und das Ergebnis ist das gleiche wie zuvor. Sehr eigenartig. – Varldsligist

+0

Haben Sie einen Fehler? –

+0

Nein, nur keine Nummern. – Varldsligist

1

Alles, was Imesha zuzüglich dieser Erklärung sagte:

{ 
System.out.print("\n"); 
System.out.print("\n" + "Even numbers: " + (allNumbers[i] % 2 == 0)); 
System.out.print("\n" + "Odd numbers: "); 
break; 
} 

System.out.print("\n" + "Even numbers: " + (allNumbers[i] % 2 == 0)); 
//will print true or false, if you want to display the even and odd number, you should try something like this : 

if(allNumbers[i] % 2 == 0) { 
System.out.println("Even numbers " + allNumbers[i]"); 
} else { 
System.out.println("Odd numbers " + allNumbers[i]"); 
} 
+0

Ich habe deine Lösung zu der Mischung hinzugefügt, aber ich kann nicht richtig funktionieren. Ich habe den neuen, aktualisierten Code veröffentlicht, wenn Sie einen anderen Look haben möchten. – Varldsligist

1

Vor allem, wenn der Benutzer möchten wählen die Anzahl der Zufallszahlen, müssen Sie dies erhalten, bevor Sie die allNumbers Array erstellen.

Zweitens, wie Inesha Sudasingha sagte, Java ist Null basiert, so dass die Int muss ich auf 0 initialisiert werden, um eine ArrayIndexOutOfBoundException zu vermeiden.

Drittens, die Klammern im letzten Teil der for Schleife notieren für Sie hier. Sie können entfernt werden, ohne das Ergebnis zu ändern.

Außerdem haben Sie am Ende eine Pause, die die Schleife for nach einer Iteration praktisch stoppt.

Ich möchte Sie etwas von Grund empfehlen starten und versuchen Sie das Programm in dieser Reihenfolge einzurichten:

  1. die Anzahl von Zufallszahlen von dem Benutzer übernehmen.
  2. Erstellen Sie das Array allNumbers mit der richtigen Größe.
  3. Erstellen Sie eine for Schleife, die NUR dem Array allNumbers Zufallszahlen zuweist.
  4. Erstellen Sie eine neue for Schleife, um die Ergebnisse zu drucken.
0

Bitte lesen Sie den folgenden Code durch. Mit Blick auf den Block, den Sie nach dieser Zeile System.out.print(allNumbers[i] + " "); gestartet haben, scheint es, dass Ihre Konzepte ein wenig Clearing benötigen. Die Kommentare dienen dazu, Sie besser zu verstehen.

Da Sie nichts über die gerade/ungerade Sachen erwähnt haben, habe ich gefolgert, dass Sie versuchen, die Anzahl der geraden und ungeraden Zahlen zu zählen, wie Sie im Code finden. Lassen Sie mich wissen, ob sich das ändern muss.

Bitte lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

public static void main(String[] args) { 

    // how many random numbers 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter array size: "); 

    int size = Integer.parseInt(keyboard.next()); 

    int[] randNum = new int[size]; 

    // fill array with random numbers 
    for(int i = 0 ; i < randNum.length ; i++) 
     randNum[i] = (int)(Math.random() * 999 + 1); 

    // to print the array, put import java.util.Arrays; at the top 
    System.out.println(Arrays.toString(randNum)); 

    keyboard.close(); 

    // go over elements looking for even/odd numbers 
    // by going over the list 2 times, you can print the even in the 
    // first iteration, odd in the second iteration 

    // i am using auxiliary lists 
    // ZERO-th WAY 
    List<Integer> even = new ArrayList<Integer>(); 
    List<Integer> odd = new ArrayList<Integer>(); 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 0) 
      even.add(randNum[i]); 
     else 
      odd.add(randNum[i]); 
    } 

    System.out.println("Even: " + even); 
    System.out.println("Odd: " + odd); 

    // FIRST WAY 
    // go over elements looking for even/odd numbers 
    // by going over the list 2 times, you can print the even in the 
    // first iteration, odd in the second iteration 
    System.out.print("Even: "); 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 0) 
      System.out.print(randNum[i] + " "); 
    } 

    System.out.println(); 
    System.out.print("Odd: "); 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 1) 
      System.out.print(randNum[i] + " "); 
    } 
    System.out.println(); 


    // SECOND WAY 
    int evenCount = 0, oddCount = 0; 
    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number found 
     if(randNum[i] % 2 == 0) 
      evenCount++; 
     else 
      oddCount++; 
    } 

    int[] evenNums = new int[evenCount]; 
    int[] oddNums = new int[oddCount]; 
    int evenNumsIndx = 0, oddNumsIndx = 0; 

    for(int i = 0 ; i < randNum.length ; i++) { 
     // even number 
     if(randNum[i] % 2 == 0) { 
      evenNums[evenNumsIndx] = randNum[i]; 
      evenNumsIndx++; 
     } else { 
      oddNums[oddNumsIndx] = randNum[i]; 
      oddNumsIndx++; 
     } 
    } 
    System.out.println("Even: " + Arrays.toString(evenNums)); 
    System.out.println("Odd: " + Arrays.toString(oddNums)); 
} 

Beispielausgabe:

Enter array size: 12                                       
[435, 420, 334, 248, 143, 340, 233, 940, 187, 315, 228, 132]                             
Even: [420, 334, 248, 340, 940, 228, 132]                                  
Odd: [435, 143, 233, 187, 315] 
+0

Ja! Das scheint das Problem behoben zu haben, das ich mit dem Array hatte, das nicht druckt, jedoch muss ich die ungeraden/geraden Zahlen als "User1420482" beschrieben, sowie die Zahl der Zahlreihenfolgen auf nicht mehr als 12 beschränken. Ich poste die neuer Code, sobald ich finde, wie man das macht. – Varldsligist

+0

Bitte ignorieren Sie den vorherigen Kommentar, ich habe alles außer dem Druck-Bit behoben. Ich könnte trotzdem etwas zu diesem Thema verwenden. – Varldsligist

+0

@Varldsligist Möchten Sie alle geraden Zahlen in einer Zeile und alle ungeraden Zahlen in einer anderen Zeile haben? –

Verwandte Themen