質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

7448閲覧

[Java] Scanner#hasNextInt()の使い方について

noriyo_tcp

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2014/07/25 00:24

Javaで挿入ソート

上記記事のコードを少し改変したものです。
ターミナル上で数字を入力し、リターンを押したらソートされるようにしたいのですが、現状では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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1度1ラインスキャンして、その内容をもう一度スキャンすればよさそうです。
区切り文字を改行コードにして一度読み込み、その文字列からスキャンし直しましょう。

`
import java.io.IOException;
import java.io.StringReader;
import java.util.Scanner;

public class t {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("[\r\n]+");
scanner = new Scanner(new StringReader(scanner.next()));
while(scanner.hasNextInt())
System.out.println(scanner.nextInt());
}
}
`

投稿2014/07/25 08:43

h_sakurai

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

noriyo_tcp

2014/07/26 09:25

解答ありがとうございます。ところで scanner = new Scanner(new StringReader(scanner.next())); を scanner = new Scanner((scanner.next())); としても同様の結果が得られたのですが、何か違いはあるのでしょうか?
h_sakurai

2014/07/27 08:02

コンストラクタの型が違うのですけど、 new Scanner(String)のほうが短くてよいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問