こんにちは、大学時代にプログラミングを始め、現在はエンジニアをしているuhablog(ウハブログ)です。
今回の記事ではJavaを使ってキーボードから入力された値を受け取る方法について解説していきます。
Javaでキーボードから入力された値を受け取る方法は主に次の2つがあります。
- BefferedReaderクラスを使う
- Scannerクラスを使う
それぞれの方法について解説していきます!
BefferedReaderでキーボードからの入力値を受け取る
まずはBefferedReaderでキーボードからの入力を受け取る方法について解説していきます。
次のプログラムを確認してください。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestInputStreamReader {
public static void main(String[] args) {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
System.out.println("好きなプログラミング言語を入力してください");
try {
// readLineメソッドで入力値を受け取る
String gengo = br.readLine();
br.close();
System.out.println("あなたの好きなプログラミング言語は" + gengo + "なんですね");
} catch(IOException e) {
e.printStackTrace();
}
}
}
最初にInputStreamReaderクラスのインスタンスを生成します。
その次にBefferedReaderクラスのインスタンスを生成します。
この時に先ほど生成したInputStreamReaderクラスのインスタンスを引数をして渡します。
生成されたBefferedReaderクラスのインスタンスのreadLineメソッドを呼び出すことでキーボードからの入力を受け取ることができます。
実行結果
実行するとまず文字列の出力がされます。
その状態でキーボードの入力待ちの状態となります。
好きなプログラミング言語を入力してください
入力待ちの状態で文字を入力してenterを押すと入力を受け取ることができます。
好きなプログラミング言語を入力してください
Java
あなたの好きなプログラミング言語はJavaなんですね
Scannerクラスを使ってキーボードからの入力値を受け取る
次にScannerクラスを使ってキーボードからの入力値を受け取る方法について解説していきます。
Scannerクラスは入力を受け付けるための様々なメソッドが用意されているため、用途に応じてメソッドを使い分けることができます。
nextメソッドで受け取る
まずはnextメソッドでキーボードからの入力を受け付けるコードを解説していきます。
import java.util.Scanner;
public class TestKeyboard {
public static void main(String[] args) {
// Scannerクラスのインスタンスを生成
Scanner scan = new Scanner(System.in);
System.out.println("好きなプログラミング言語を入力してください");
// nextメソッドで入力値を受け取る
String gengo = scan.next();
// 受け取った値を出力
System.out.println("あなたの好きなプログラミング言語は" + gengo + "なんですね");
}
}
上記プログラムは次のような処理を順番に実行しています。
- Scannerクラスのインスタンスを生成
- 生成したインスタンスのnextメソッドを呼び出してユーザーの入力を待つ
- 受け取った値を変数gengoに代入する
- gengoを使って出力する
実行結果
実行すると最初に「好きなプログラミング言語を入力してください」と出力され、キーボードからの入力待ちになります。
好きなプログラミング言語を入力してください
言語を入力して「Enter/return」キーを押すと入力された値を受け取り、出力がされます。
好きなプログラミング言語を入力してください
Java
あなたの好きなプログラミング言語はJavaなんですね
ユーザーからの入力を受け取ることができました!
複数の値の入力
nextメソッドの特徴として、区切り文字までの値を受け取るというものがあります。
区切り文字というのはデフォルトで空白文字が設定されていて、半角スペースやタブ、改行などが含まれます。
これらの空白文字が入力されると、その後の入力値は無視されます。
例えば先ほどのプログラムを実行して次のように入力したとします。
好きなプログラミング言語を入力してください
Java Python
これでEnterを押すと次のように「Java」だけ受け取られていることがわかります。
好きなプログラミング言語を入力してください
Java Python
あなたの好きなプログラミング言語はJavaなんですね
では2つの値を半角スペース区切りで受け取りたい場合はどうすれば良いでしょうか?
その解決策の一つとしてnextメソッドを2回呼び出しておくというものがあります。
プログラムを次のように修正します。
public static void main(String[] args) {
// Scannerクラスのインスタンスを生成
Scanner scan = new Scanner(System.in);
System.out.println("好きなプログラミング言語をスペース区切りで入力してください");
// nextメソッドで入力値を受け取る
String gengo1 = scan.next();
String gengo2 = scan.next();
// 受け取った値を出力
System.out.println("あなたの好きなプログラミング言語は" + gengo1 + "と" + gengo2 + "なんですね");
}
上記のプログラムを実行し、半角スペース区切りで文字を入力してみます。
好きなプログラミング言語をスペース区切りで入力してください
Java Python
すると2つとも受け取ることができることがわかります。
好きなプログラミング言語をスペース区切りで入力してください
Java Python
あなたの好きなプログラミング言語はJavaとPythonなんですね
nextLineメソッドで1行丸ごと受け取る
次にnextLineメソッドで1行丸ごと受け取る方法を解説していきます。
先ほどのnextメソッドでは半角スペースなどの区切り文字が入力されると、そこまでしか入力された値を受け取ることができませんでした。
しかしnextLineメソッドを使うことで、空白文字を無視して1行丸ごとキーボードからの入力を受け取ることができます。
次のプログラムを見てください。
こちらは先ほどのnextメソッドをnextLineメソッドに変更したものです。
import java.util.Scanner;
public class TestKeyboard {
public static void main(String[] args) {
// Scannerクラスのインスタンスを生成
Scanner scan = new Scanner(System.in);
System.out.println("好きなプログラミング言語を入力してください");
// nextLineメソッドで入力値を1行全て受け取る
String gengo = scan.nextLine();
// 受け取った値を出力
System.out.println("あなたの好きなプログラミング言語は" + gengo + "なんですね");
}
}
実行結果
上記のプログラムを実行して、スペース区切りでキーボードを使って入力してみます。
好きなプログラミング言語を入力してください
Java Python Ruby
すると全ての入力値を受け取ることができていることがわかります。
好きなプログラミング言語を入力してください
Java Python Ruby
あなたの好きなプログラミング言語はJava Python Rubyなんですね
nextIntメソッドでint型を受け取る
最後にnextIntメソッドについて解説していきます。
これまでみてきたnextメソッドやnextLineメソッドは入力値をString型として受け取るものでした。
しかしnextIntメソッドを利用することで、int型の変数として受け取ることができます。
次のプログラムを確認してください。
import java.util.Scanner;
public class TestKeyboard {
public static void main(String[] args) {
// Scannerクラスのインスタンスを生成
Scanner scan = new Scanner(System.in);
System.out.println("好きな整数値を入力してください");
// nextIntメソッドで整数値を受け取る
int num = scan.nextInt();
// 受け取った値を出力
System.out.println("あなたの好きな数字は" + num + "なんですね");
}
}
実行結果
上記のプログラムを実行すると数字の入力を受け付けることができます。
好きな整数値を入力してください
7
あなたの好きな数字は7なんですね
ここでは一例としnextIntメソッドを紹介しましたが、他にもnextFloat、nextDoubleなど型に応じたメソッドが用意されているので、受け取りたい値に応じてメソッドを使い分けることができます。
おまけ:nextIntメソッドで整数値以外を入力した場合
おまけです。
nextIntメソッドを呼び出した時に整数値以外を入力するとどうなるでしょうか?
好きな整数値を入力してください
e
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at keyboard.TestKeyboard.main(TestKeyboard.java:14)
InputMismatchExceptionが発生しました。
nextIntメソッドを利用するときは整数値以外が入力される可能性も考慮したプログラムを書くとより良いプログラムを書くことができるようになります。
BefferedReaderとScannerクラスの違い
今回の記事ではBefferedReaderとScannerクラスを使ってキーボードからの入力を受け取る方法を紹介してきました。
ではこの二つの違いはどんなものがあるでしょうか?
1つ目は受け取ることができる型です。
BefferedReaderはString型しか受け取ることができません。
一方Scannerは様々なメソッドを使い分けることでいろいろな方を受け取ることができます。
2つ目はBefferedReaderは利用する際にIOExceptionの発生に備えてtry-catch文を使って対処する必要があります。
しかしScannerであればこのような対処をする必要はありません。
とはいってもnextIntを使った時に整数値以外が入力されることも考慮するとなると同じようにtry-catchを記述する必要があるかもしれません。
3つ目はBefferedReaderの方がパフォーマンスに優れているということです。
まとめ
今回の記事ではJavaでキーボードから入力を受け取る方法を紹介しました!
JavaではBefferedReaderとScannerを使うことでキーボードからの入力を受け取ることができます。
BefferedReaderとScannerの違いを理解して、状況に応じて使い分けることができるようにしましょう!
またScannerクラスには様々なメソッドが用意されているため、用途に応じてメソッドを使い分けることができます!
挫折せずにプログラミングを学ぶためには?
僕はプログラミングで挫折した経験があります。
エラーの連続やエラーが解消しても思った通りに動かないといったことが原因で、プログラミングが嫌いでした。
「プログラミングって全然意味わからないし、全然楽しくない」そう思っていました。
原因は当時周りに聞ける人が誰もいなかったからです。
プログラミング学習をしていく上で周りに聞ける環境というのはとても大切です。
周りに聞ける人なんていない
そんな人におすすめなのが月額10,780円で現役エンジニアに質問できる、プログラミングスクールのFreeksです。
多くのプログラミングスクールが数十万円払って通うところを月額10,780円から通うことができるのはコスパが良いです。
しかもサブスク制で、自分のペースで学ぶことができ嫌になったらすぐにやめることができます。
「周りに誰も聞ける人がいなくて、エラーが解決できない」「プログラミング全然楽しくない」という方は、無料カウンセリングを受けてみて下さい。
【関連記事】Freeks評判、口コミ