2017-02-15 5 views
0

基本的に私は10文字のユーザー入力を取得して配列に格納し、バブルソート技術を使用して昇順で並べ替えるためのプログラムを作成しました。しかし、私がコードを実行するたびに(blue j環境で)、出力はすべての文をスキップし、半分しか実行しません。ここ はコードです: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

覚えておいてください、改行も文字です – JonK

+0

ありがとう!しかし、私は改行文字を無視することができますか、または私はちょうどループの反復を増やす必要がありますどのような方法ですか? –

+2

すべての文字が同じ行に入力されていると、現在のコードが動作する可能性があります。 – Aaron

答えて

0

ユーザーは常に入力文字列で区切られる場合はフィード、あなただけの改行(複数可?)の文字を読み、それらを捨てることができます。

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 
} 

コードは可能性があり必要に応じてSystem.lineSeparator()が何であるかを確認してポータブルにすることができます。

コメントとして、すべての文字が同じ行に入力された場合(つまりabcdefghij[enter])、現在のコードが正しいと見なすこともできます。

+0

1行にすべての入力を取得するにはどうすればよいですか? –

+0

@UrvishRamaiyaは、入力時に各文字の間に「Enter」キーを押しませんか?私はあなたの質問を理解したか分からない – Aaron

+0

ああ、私は今それを得る。助けてくれてありがとう! –

0

Updated:読者が必須であるという事実を使用してに応じて、あなたのソースは次のようになります。私はArrays.toStringと配列のためのより詳細な出力を追加した

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は - あなたがそのようなクラスを使用してはならない場合は、省略することができます。

+0

私は学校で教えられていないので、私が書いたコードのためにスキャナを使用することは許されません。 –

+0

「Reader」のみが受け入れ可能ですか?別の制限がありますか? –

+0

ええ、読者だけが受け入れられます。 –

関連する問題