上記記事のコードを少し改変したものです。
ターミナル上で数字を入力し、リターンを押したらソートされるようにしたいのですが、現状ではsortと入力してはじめてソートするようにしています。
hasNextInt(Pattern pattern)を使えばよいのか、whileを使っているのがよくないのか、そもそもできないのか分かりません。
誰か教えていただけると幸いです。
(あまり挿入ソートと関係ないのですが・・・)
`
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.regex.Pattern;
public class InsertionSort {
public static void main(String[] args) throws IOException { System.out.println("数字を空白区切りで入力し、次行でsortと入力してください。"); ArrayList<Integer> AL = new ArrayList<Integer>(); Scanner scanner = new Scanner(System.in); /* 元ネタの記事より int n = scanner.nextInt(); int A[] = new int[n]; // 初めに読み込んだ数字を要素数にしている for (int i = 0; i < n; i++) { A[i] = scanner.nextInt(); // 次の数字から読み込んで配列に格納 } */
// 数字を入力してターンっしても入力待ちが続いているので、sortと打ち込んではじめてループを抜けるようにしている
while (scanner.hasNextInt() && !scanner.hasNext("sort")) {
AL.add(scanner.nextInt());
}
int[] A = new int[AL.size()]; for (int i = 0; i < AL.size(); i++) { A[i] = AL.get(i); } // ここから挿入ソート for (int j = 1; j < A.length; j++) { int key = A[j]; int i = j - 1; while (i >= 0 && A[i] > key) { A[i + 1] = A[i]; i--; } A[i + 1] = key; System.out.println(Arrays.toString(A).replaceAll("[,\[\]]", "")); } }
}
`
[実行結果]
数字を空白区切りで入力し、次行でsortと入力してください。
5 2 4 1 6 3 // ほんとはここでターンっしてソート開始したい
sort
2 5 4 1 6 3
2 4 5 1 6 3
1 2 4 5 6 3
1 2 4 5 6 3
1 2 3 4 5 6

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/07/26 09:25
2014/07/27 08:02