2017-02-15 6 views
0

Also im Grunde habe ich ein Programm für die Schule geschrieben, um eine Benutzereingabe von 10 Zeichen und speichern Sie es in ein Array, und dann sortieren Sie in aufsteigender Reihenfolge mit der Blase Sort-Technik. Aber immer, wenn ich den Code ausführe (in der blauen j Umgebung), überspringt die Ausgabe, die kommt, eine Eingabe jede Anweisung und läuft nur die Hälfte der Zeiten, die ich will. Hier ist der Code: (s)Überspringen von Benutzereingaben von Java

import java.io.*; 
public class p19 
{ 
    public static void main()throws IOException 
    { 
     InputStreamReader isr = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(isr); 
     char arr[] = new char[10]; 
     int i ;char plol; 
     System.out.println("Enter characters"); 
     for(i=0;i<10;i++) 
     { 
      arr[i] = (char)br.read(); 
     } 
     for(i=0;i<10;i++) 
     { 
      int x = 0; 
      for(int j=1;j<10-i;j++,x++) 
      { 
       if(arr[j]<(arr[x])) 
       { 
        plol = arr[j]; 
        arr[j] = arr[i]; 
        arr[i] = plol; 
       } 
      } 
     } 
     for(i=0;i<10;i++) 
      System.out.println(arr[i]); 
    } 
} 
+3

Denken Sie daran, Zeilenumbrüche sind auch Zeichen – JonK

+0

danke! Aber gibt es eine Möglichkeit, wie ich das Newline-Zeichen ignorieren kann oder sollte ich nur die Wiederholungen der Schleifen erhöhen? –

+2

Beachten Sie, dass Ihr aktueller Code wahrscheinlich funktionieren würde, wenn alle Zeichen in derselben Zeile eingegeben würden. – Aaron

Antwort

0

Wenn der Benutzer immer eingegebenen Zeichen für Zeile getrennt Feeds, können Sie einfach den Zeilenvorschub lesen Zeichen und verwerfen sie:

for(i=0;i<10;i++) 
{ 
    arr[i] = (char)br.read(); 
    //br.read() //discards the CR character, only needed on Windows platforms 
    br.read() //discards the LF character 
} 

Der Code könnte portabel gemacht werden, indem überprüft wird, was die System.lineSeparator() ist, wenn nötig.

Wie bereits erwähnt, könnte Ihr aktueller Code auch als korrekt angesehen werden, wenn alle Zeichen in derselben Zeile eingegeben werden (d. H. abcdefghij[enter]).

+0

Wie bekomme ich alle Eingaben in einer Zeile? –

+0

@UrvishRamaiya nicht drücken "Enter" zwischen den einzelnen Zeichen, wenn Sie sie eingeben? Ich bin mir nicht sicher, ob ich deine Frage verstanden habe – Aaron

+0

Oh, ich verstehe es jetzt. Danke für die Hilfe! –

0

Updated: nach der Tat mit, dass Leser Ihre Quellen aussehen kann obligatorisch ist:

import java.io.*; 
import java.util.Arrays; 
public class p19 { 
    public static void main(String... args) throws IOException { 
     InputStreamReader isr = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(isr); 
     char[] arr = new char[10]; 
     int i = 0; 

     System.out.println("Enter characters"); 
     while(i < 10) { 
      String line = br.readLine(); 
      for (int x = 0 ; x < line.length() && i < 10 ; x++) { 
       char chr = line.charAt(x); 
       //accept only viewable symbols: 
       if (chr >= 0x30 && chr < 0xA0) { 
        arr[i++] = chr; 
       } 
      } 
     } 
     System.out.println("Got array: " + Arrays.toString(arr)); 

     //there are exists simplier sample of bubble sort: 
     for(i = 0 ; i < arr.length ; i++) { 
      for(int j = 0 ; j < arr.length - 1 - i ; j++) { 
       if(arr[j] > arr[j + 1]) { 
        char big = arr[j]; 
        arr[j] = arr[j + 1]; 
        arr[j + 1] = big; 
       } 
      } 
     } 
     System.out.println("Sorted array: " + Arrays.toString(arr)); 

     for(i = 0 ; i < 10 ; i++) { 
      System.out.println(arr[i]); 
     } 
    } 
} 

PS I hinzugefügt haben eine ausführlichere Ausgabe mit Arrays.toString für Arrays - Sie können weglassen, wenn Sie nicht solche Klasse verwenden sollten .

+0

Die Sache ist, ich darf den Scanner nicht für den Code verwenden, den ich geschrieben habe, weil wir das nicht in der Schule gelernt haben. –

+0

Nur 'Reader' ist akzeptabel? Gibt es noch weitere Einschränkungen? –

+0

Ja, nur Leser ist akzeptabel. –

Verwandte Themen