2017-11-15 3 views
-1

私はコマンドラインでjavaを使用していますが、フィルタをかけて整数のシーケンスの重複を取り除くことができるプログラマを書こうと思っていますが、まずStdInを使ってIntegerのsequnceを読み込む方法はわかりません。Stdinで標準入力から一連の整数を読み取る方法は?

プログラムは、StdInの助けを借りてEOFシーケンスに達するまで、標準入力から値を読み取る必要があります。コマンドラインで

入力と出力の例:

$ echo 1 1 2 2 1 1 3 4 6 2 1 | java RemoveDuplicates 
1 2 1 3 4 6 2 1 

私は配列

int[] n = StdIn.readAllInts(); 

に整数に変換しようとしましたが、それをプリントアウトしようとしたとき、それは動作しません。 誰でも私にいくつかのヒントを教えていただけますか?

+0

JavaのRemoveDuplicatesに入れ、重複を削除したい場合は|エコー1 1 2 2 1 1 3 4 6 2 1 ? –

答えて

0

あなたは、通常のスキャナで文字列としてそれをキャッチすることができるはずです:あなたも試すことができますので、

Scanner in = new Scanner(System.in); 
String line = in.nextLine(); 

は時々二行目は、いくつかの入力のために動作しません。

String line = in.next(); 

数値を整数として取得するにはinputStreamを使用できますが、どのように動作するのか分かりません。

0

可能な解決策は次のようになります。

int testNum; 
    Set<Integer> set = new HashSet<Integer>(); 
    Scanner in = new Scanner(System.in); 

    System.out.println("number of elements to be inserted"); 
    testNum = in.nextInt(); 




    //Add items 
    for (int i = 0; i<testNum; i++) 
    { 
      set.add(in.nextInt()); 
    } 

    //Print all element 
    Iterator it = set.iterator();  
    while(it.hasNext()){ 
      System.out.println(it.next()); 
    } 

は、私は、これは重複したエントリを削除しますが、まだ順序を保持し、以下のあなたに

+0

詳細については、Java文書(Set、Iterator) –

0

サンプル・プログラムを助けたことを願っています。

public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter the sequence with spaces e.g. 1 3 5 3 1 1 3 5 "); 
    String input = sc.nextLine(); 
    String[] numbers = input.split("\\s+"); 

    List<String> result = new ArrayList<>(); 
    for (int x = 0; x < numbers.length; x++) { 
     String item = numbers[x]; 
     if (result.contains(item)) continue; 
     result.add(item); 
    } 
    System.out.println(String.join(" ", result)); 
} 

、出力サンプルは次のとおりです。

Enter the sequence with spaces e.g. 1 3 5 3 1 1 3 5 
1 1 2 2 1 1 1 3 4 1 1 1 11 11 12 12 1 1 6 6 2 1 //sequence entered 
1 2 3 4 11 12 6 // sample result 
+0

を参照してください。連続した複製のみを削除しています – c0der

+0

すべての複製を削除するコードを更新しました – johnII

0

Stdinは必要ありません。

java RemoveDuplicates 1 1 2 2 1 1 3 4 6 2 1 

を呼び出すことによって、それはすべてのそれらの値のアレイにString[] argsを割り当てます。

あなたはSet

public static void main(String[] args) { 
    Set<String> uniq = new HashSet<>(); 
    for (String s : args) { 
     uniq.add(s); 
    } 
    System.out.println(uniq); 
} 
関連する問題