2017-01-23 6 views
0

私は、ユーザにn単語を各行に1つずつ入力させ、出力を辞書順ソート語として与えるようにプログラムを作成しようとしています。ユーザー入力の字句順のJavaコードを編集します。単語の

最初の行に単語の数を入力し、各行に単語の数を入力するようにユーザーに求めます。私はこのプログラムのために多次元配列を使うことになっています。

ユーザーの入力としてn個の単語を入力できない代わりに、n - 1個の単語しか使用できないという点を除いて、コードは正常に機能します。

public static void main (String[] args) throws Exception 
{ 
    Scanner input = new Scanner(System.in); 
    int n = input.nextInt(); 
    String arr[] = new String[n]; 

    for (int i = 0; i < n; i++) { 
    arr[i] = input.nextLine(); 
    } 

    for (int i = 0; i < n - 1; i++) { 
    for (int j = i + 1; j < n; j++) { 
     if (arr[i].compareTo(arr[j])>0) { 
     String temp = arr[i]; 
     arr[i] = arr[j]; 
     arr[j] = temp; 
     } 
    } 
    } 

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

あなたが戻ってくるエラーとそれを修正しようとしたものを投稿してください。 Cheers – Alos

+0

'nextLine()'は、ユーザ入力を返した後自動的に下に移動します。 –

+0

@Niraj私のプログラムでエラーの原因となった 'nextLine()'を指摘してくれてありがとう。これを 'next()'に置き換えることで問題は解決しました。私は、ユーザ入力として所望の「n」個の単語を入力することができました。 –

答えて

1

あなたが発生している問題は、スキャナのnextInt()方法に関係しています。 は入力バッファーから整数を読み取り、バッファーの最初の行の末尾に改行文字を置きます。

これは、最初にnextLine()を呼び出すと、空の文字列が読み込まれ、改行文字が消費されることを意味します。

簡単な修正は、input.nextLine()コールをinput.nextInt()と読み取りループの間に置くことです。

+0

すみません。私は最初にエラーの原因を理解することができませんでしたが、あなたの投稿を読み直してプログラムに実装した後、空の文字列を作成していた 'nextInt()'と理解しました。 nextInt()の直後で読み取りループの前に 'nextLine()'を実行し、空文字列の問題を解決しました。 –

0

ユーザーに単語を入力し、プログラムに単語の数を決定させることができます。

  Scanner input = new Scanner(System.in); 
      System.out.println("Enter words:"); 
      String data = input.nextLine(); 
      String[] arr= data.split("\\s+"); //splits the word by space and stores the words in pieces 
// and then do the lexicographical operations here 
関連する問題