数値と行の読み取り
nextInt、nextLineとその注意点を学びます
「数値と行の読み取り」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
型付き数値の読み取り
Scannerでは、nextIntやnextDoubleなどのメソッドを使って数値を直接読み取れます。これらは次のトークンを対応するプリミティブ型に変換します。
整数の読み取り
nextInt()は次のトークンを読み取り、intとして返します。ここでは入力なしで実行できるよう固定文字列を使っています。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("25");
int age = scanner.nextInt();
System.out.println(age + 1);
scanner.close();
}
}Doubleの読み取り
nextDouble()は浮動小数点数を読み取ります。その値を計算に使用できます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("3.5");
double radius = scanner.nextDouble();
System.out.println(radius * 2);
scanner.close();
}
}複数の数値の読み取り
数値を読み取るメソッドを複数回使うと、空白文字を読み飛ばしながらトークンを順番に取得できます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("10 20 30");
int a = scanner.nextInt();
int b = scanner.nextInt();
int c = scanner.nextInt();
System.out.println(a + b + c);
scanner.close();
}
}終わるまで合計する
hasNextInt()とnextInt()を組み合わせると、個数がわからない数値を読み取れます。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("5 15 25 35");
int total = 0;
while (scanner.hasNextInt()) {
total += scanner.nextInt();
}
System.out.println(total);
scanner.close();
}
}有名なnextLineの落とし穴
ここでは典型的な落とし穴を紹介します。nextInt()は数値を読み取りますが、改行文字をバッファーに残します。そのため、次のnextLine()は期待したテキストではなく、残った空の行を読み取ります。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nHello World");
int n = scanner.nextInt();
String line = scanner.nextLine();
System.out.println("Number: " + n);
System.out.println("Line: [" + line + "]");
scanner.close();
}
}落とし穴の修正
残っている改行を消費してから実際の行入力を読み取るために、nextInt()の後で追加のnextLine()を呼び出します。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("42\nHello World");
int n = scanner.nextInt();
scanner.nextLine();
String line = scanner.nextLine();
System.out.println("Number: " + n);
System.out.println("Line: [" + line + "]");
scanner.close();
}
}long型とboolean型の読み取り
Scannerには、nextLongやnextBooleanなども用意されています。それぞれ対応する型のトークンを1つ読み取ります。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("9000000000 true");
long big = scanner.nextLong();
boolean flag = scanner.nextBoolean();
System.out.println(big);
System.out.println(flag);
scanner.close();
}
}型が一致しないとスローされる
次のトークンが有効な数値でない場合、nextIntはInputMismatchExceptionをスローします。不確かな場合は、まずhasNextIntで確認してください。
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("abc");
try {
scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("Not an integer!");
}
scanner.close();
}
}安全な数値の読み取り
堅牢なパターンでは、正しい型の値が利用できる場合だけ読み取り、それ以外の場合は不正なトークンを読み取って破棄します。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner("x 7 y 9");
int sum = 0;
while (scanner.hasNext()) {
if (scanner.hasNextInt()) {
sum += scanner.nextInt();
} else {
scanner.next();
}
}
System.out.println(sum);
scanner.close();
}
}重要なポイント
数値にはnextIntとnextDoubleを使い、hasNext系のメソッドで確認してください。また、nextLineに切り替える前に、残った改行を消費することを忘れないでください。
確認問題
数値と行の読み取りに関する知識を確認しましょう。
まとめ
数値と行の読み取り方法を学びました。
nextInt、nextDouble、nextLongで型付きの数値を読み取る- 個数が不明な場合は
hasNextIntとループを使う - 改行の落とし穴:
nextIntの後で追加のnextLineを呼び出す - 不正なトークンは
InputMismatchExceptionをスローする - 安全性を高めるため、
hasNext系のメソッドで読み取りを確認する
よくある質問
「数値と行の読み取り」レッスンは無料ですか?
はい。「数値と行の読み取り」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「数値と行の読み取り」で何を学びますか?
nextInt、nextLineとその注意点を学びます ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「数値と行の読み取り」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。