💬
Scanner.nextXXX(): キーボードからの入力値を取得する
Scanner.nextXXX(): キーボードからの入力値を取得する
PaizaではScanner
クラスを使って入力値を取り込む必要がある。
その中で外せないのが、nextXXX()
系のメソッドだ。
今のところ、よく出てくるのが、以下の3つ。
nextLine()
next()
nextInt()
使い分けがいまいちよく分からないというか、勘で行っている部分が多いので、まとめてみた。
最低限頭に入れておけばいいのは、next()
とnextInt()
が読み込む範囲は、次のスペース、タブ、改行記号まで。nextLine()
は次の改行記号までを読み込むということだと思う。
メソッド | 取得するもの | 読み込み後のカーソルの位置 | その他 |
---|---|---|---|
nextLine() |
現在の行の残り(次の改行記号まで読み込む) | 次の行 | 行が空でも読み込む。スペースが入っていても読み込み可 |
next() |
次の要素[1]を取得(次のスペース/tab/改行記号までを読み込む) | 同じ行の可能性も | - |
nextInt() |
次の要素[1:1]をint [2]として取得(次のスペース/tab/改行記号までを読み込む) |
同じ行の可能性も | 次の要素がint に変換できない場合はエラーを返す |
例
Example.java
public class Example {
static String test1 =
"3 5 6 7 8";
static String test2 =
"FCrj 7A7SbR9i S Pza OXvPpkqNf2";
static String test3 =
"FC rj\n7A7 SbR9i\n S\nPza\nOXvPpkqNf2";
public static void main(String[] args) {
Scanner sc1 = new Scanner(test1);
int[] ary = new int[5];
for(int i = 0; i < 5; i++)
ary[i] = sc1.nextInt();
sc1.close();
Scanner sc2 = new Scanner(test2);
String[] arystr2 = new String[5];
for(int j = 0; j < 5; j++)
arystr2[j] = sc2.next();
sc2.close();
Scanner sc3 = new Scanner(test3);
String[] arystr3 = new String[5];
for(int k = 0; k < 5; k++)
arystr3[k] = sc3.next();
sc3.close();
Scanner sc4 = new Scanner(test3);
String[] arystr4 = new String[5];
for(int k = 0; k < 5; k++)
arystr4[k] = sc4.nextLine();
sc3.close();
System.out.println(Arrays.toString(ary));
System.out.println(Arrays.toString(arystr2));
System.out.println(Arrays.toString(arystr3));
System.out.println(Arrays.toString(arystr4));
}
}
出力結果
[3, 5, 6, 7, 8]
[FCrj, 7A7SbR9i, S, Pza, OXvPpkqNf2]
[FC, rj, 7A7, SbR9i, S]
[FC rj, 7A7 SbR9i, S, Pza, OXvPpkqNf2]
複雑な入力値に対しての対処法
next().split(" "): 文字列から二次元配列を作る
想定しているのは、以下のインプットを二次元配列に変換すること。
input:
XXOXO
OXOXX
OOOOO
OXOX.
XOXXO
output:
[[X, X, O, X, O], [O, X, O, X, X], [O, O, O, O, O], [O, X, O, X, .], [X, O, X, X, O]]
static String test1 =
"XXOXO \n" +
"OXOXX \n" +
"OOOOO \n" +
"OXOX. \n" +
"XOXXO";
public static void main(String[] args) {
Scanner sc = new Scanner(test1);
String board[][] = new String[5][5];
// Create 2D-array, board
for (int i = 0; i < 5; i++) {
board[i] = sc.next().split("");
}
System.out.println(Arrays.deepToString(board));
}
-
board[i] = sc.next().split("");
-
sc.next()
で得られるのは文字列- 例:
"XXOXO"
- 例:
- この文字列に対して`.split("")で、文字列を配列に変換
- 例:
[X, X, O, X, O]
- 例:
-
- 以上の処理を、列の数だけ繰り返している。
Discussion