
Java道|Javaの入出力の基本
標準入力はJavaへの入口、標準出力は画面への出口。入出力の流れがわかると、プログラムは使う人とやり取りできるようになる
ここまでのJava学習では、画面に文字や数値を表示する方法、キーボードから文字列を受け取る方法を学んできました。最初はそれぞれ別々の処理に見えるかもしれませんが、Javaの中では大きく入力と出力という流れで考えられます。
出力とは、プログラムから外へ情報を出すことです。学習のはじめでは、画面に文字を表示することだと考えるとわかりやすいです。これまで何度も使ってきた System.out.println は、標準出力へ文字や値を送り、画面に表示するための代表的な書き方です。
一方、入力とは、外からプログラムへ情報を受け取ることです。キーボードから入力された文字列をJavaの中に取り込む処理がこれにあたります。System.in は、標準入力と結びついた入り口として考えられます。
鬼殺隊風にたとえるなら、標準入力は隊士から届く伝令を受け取る入口、標準出力は任務結果を本部の掲示板に出す出口です。隊士がキーボードから合図や数値を伝え、Javaがそれを受け取り、必要なら変換し、最後に画面へ結果を出す。この一連の流れが見えてくると、Javaプログラムはぐっと実践的に感じられます。
ここでは、標準入力と標準出力とは何か、キーボードから入力した内容が最初は文字列として扱われる理由、数値として使うための変換、そして入力ミスに気をつける考え方を、鬼滅の刃風の修行イメージに置き換えながら、やさしく整理していきます。
標準出力とは何か
標準出力とは、プログラムがデータを外へ出すための基本的な出力先のことです。
学習の初期段階では、標準出力は画面のことだと考えるとわかりやすいです。Javaで文字や数値を画面に表示するときに使ってきた System.out.println は、この標準出力へ内容を送っています。
System.out.println("修行を開始します。");
このように書くと、文字列が標準出力へ送られ、画面に表示されます。
鬼殺隊風にたとえるなら、標準出力は本部の掲示板のようなものです。プログラムが伝えたい内容を掲示板に出すことで、使う人がその結果を見られるようになります。
| 用語 | 役割 | 学習初期のイメージ |
|---|---|---|
| 標準出力 | プログラムが情報を外へ出す場所 | 画面 |
| System.out | 標準出力と結びついたもの | 掲示板へ送る通路 |
| println | 内容を表示して改行する処理 | 掲示板に1行出す |
ここで大切なのは、画面に表示するという操作を、Javaのしくみとして見ると「標準出力に送っている」と考えられることです。
この見方ができるようになると、System.out.println がただの暗記ではなく、Javaが外へ情報を出すための出口として理解しやすくなります。
標準入力とは何か
標準入力とは、プログラムが外からデータを受け取るための基本的な入力元のことです。
学習の初期段階では、標準入力はキーボードのことだと考えるとわかりやすいです。キーボードから入力された文字列をJavaで受け取るときに出てきた System.in は、この標準入力と結びついています。
new InputStreamReader(System.in)この中にある System.in は、キーボードから入ってくる情報の入口として使われます。
鬼殺隊風にたとえるなら、標準入力は伝令が入ってくる門です。隊士がキーボードから合言葉や数値を伝えると、その情報が標準入力を通ってプログラムの中へ入ってきます。
| 用語 | 役割 | 学習初期のイメージ |
|---|---|---|
| 標準入力 | プログラムが情報を受け取る場所 | キーボード |
| System.in | 標準入力と結びついたもの | 伝令が入ってくる門 |
| readLine | 入力された1行を読み取る処理 | 伝令の言葉を1行分受け取る |
標準出力が「外へ出す出口」なら、標準入力は「中へ入れる入口」です。
この2つを対にして考えると、Javaの入出力の全体像がつかみやすくなります。
標準入力と標準出力の関係
標準入力と標準出力は、プログラムから見た情報の流れを表します。
標準入力は、外からプログラムへデータを入れる入口です。
標準出力は、プログラムから外へデータを出す出口です。
| 用語 | 役割 | ふつう意味するもの | 鬼殺隊風のイメージ |
|---|---|---|---|
| 標準入力 | プログラムが受け取る | キーボード | 伝令が入る門 |
| 標準出力 | プログラムが出力する | 画面 | 結果を出す掲示板 |
たとえば、キーボードで数値を入力し、その数値を画面に表示するプログラムは、次のような流れで動いています。
| 流れ | 内容 |
|---|---|
| 1 | 標準出力で入力をうながす |
| 2 | 標準入力からキーボード入力を受け取る |
| 3 | 入力された値を変数に入れる |
| 4 | 必要に応じて変換する |
| 5 | 標準出力で結果を表示する |
鬼殺隊の任務に置き換えると、まず本部が「年齢を報告せよ」と掲示します。次に隊士がキーボードで年齢を伝えます。その内容をJavaが受け取り、必要なら数値に変換し、最後に「入力された年齢は20歳です」と掲示するイメージです。
入力と出力をこのようにひとつの流れで見ると、Javaプログラムが「受け取る」「処理する」「出す」という形で動いていることがわかります。
キーボードから入力した内容は最初は文字列として扱われる
キーボードから入力した内容は、最初から数値として扱われるわけではありません。
ここはとても大切です。
たとえば、キーボードで 5 と入力したとします。見た目には数値に見えます。しかし、readLine で読み込んだ直後は、これは数値の5ではなく、文字列としての5です。
つまり、Javaはまず「キーボードから入力された文字の並び」として受け取ります。
| 入力した内容 | 入力直後の扱い |
|---|---|
| 5 | 文字列としての5 |
| 20 | 文字列としての20 |
| 3.14 | 文字列としての3.14 |
| 水の型 | 文字列としての水の型 |
鬼殺隊風にたとえるなら、隊士が「20」と伝令で送ってきても、最初は巻物に 20 という文字として書かれている状態です。そのままでは、年齢や数値として計算に使えるわけではありません。
Javaで本当に数値として使いたい場合は、この文字列を数値へ変換する必要があります。
数値入力では変換が必要になる
キーボードから入力された内容が最初は文字列として扱われるため、そのままでは int型や double型の変数に入れられません。
int型は整数を入れるための型です。
double型は小数を入れるための型です。
しかし、readLine で受け取った値は String型です。
そのため、型が合いません。
| 受け取った値 | 型 | そのまま数値変数に入れられるか |
|---|---|---|
| readLine で受け取った 20 | String | そのままでは不可 |
| 整数に変換した 20 | int | int型に入れられる |
| 小数に変換した 3.14 | double | double型に入れられる |
鬼殺隊の任務で考えると、伝令の巻物に書かれた 20 という文字を、任務記録の数値欄にそのまま貼り付けることはできません。まず「これは整数の20です」と読み替える必要があります。
Javaでは、この読み替えにあたる処理が変換です。
整数を入力するための基本の流れ
整数を入力して使う場合は、いきなり int型の変数に入るわけではありません。
次のような順番で処理します。
| 順番 | 処理 | 役割 |
|---|---|---|
| 1 | 入力をうながすメッセージを表示する | 使う人に何を入力するか知らせる |
| 2 | キーボードから1行の文字列を読み込む | 入力内容をString型で受け取る |
| 3 | 文字列を整数に変換する | int型として扱える形にする |
| 4 | 変換した整数を変数に入れる | 数値として利用できるようにする |
| 5 | 結果を表示する | 標準出力へ出す |
この流れで大切なのは、入力された内容をいったん文字列として受け取り、そのあとで整数へ変換しているという順番です。
鬼殺隊風に言えば、まず隊士の伝令を巻物に書き取り、その後で「これは年齢の数値だ」と判断し、年齢記録の札へ写すような流れです。
整数入力の流れを確認する
ファイル名:Sample5.java
import java.io.*;
class Sample5
{
public static void main(String[] args) throws IOException
{
System.out.println("隊士の年齢を整数で入力してください。");
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int age = Integer.parseInt(str);
System.out.println("入力された隊士の年齢は " + age + " 歳です。");
}
}実行結果
隊士の年齢を整数で入力してください。
20
入力された隊士の年齢は 20 歳です。このプログラムでは、まず画面に入力をうながすメッセージを表示しています。
System.out.println("隊士の年齢を整数で入力してください。");これは標準出力を使って、使う人に「整数を入力してください」と伝える処理です。
次に、キーボードから入力を受け取る準備をしています。
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));この部分で、標準入力であるキーボードから文字列を読み取れるようにしています。
そのあと、次の文で入力された1行を受け取ります。
String str = br.readLine();ここで入力された 20 は、まず String型の文字列として str に入ります。
そして、次の文で文字列を整数に変換します。
int age = Integer.parseInt(str);str に入っている文字列を整数へ変換し、その結果を int型の変数 age に入れています。
最後に、変換後の age を使って画面に表示しています。
System.out.println("入力された隊士の年齢は " + age + " 歳です。");この流れを表にすると、次のようになります。
| 順番 | 処理 | 変数の状態 |
|---|---|---|
| 1 | 入力をうながす | まだ入力はない |
| 2 | br.readLine で入力を受け取る | str に文字列として 20 が入る |
| 3 | Integer.parseInt で変換する | age に整数として 20 が入る |
| 4 | age を表示する | 20 が数値として使われる |
ここで特に大切なのは、str と age の役割が違うことです。
| 変数 | 型 | 役割 |
|---|---|---|
| str | String | 入力された内容を文字列として受け取る |
| age | int | 変換後の整数を入れる |
str は入力された文字列を受け取る変数です。age は、整数に変換したあとの値を入れる変数です。この2段階を意識すると、数値入力の流れがとてもわかりやすくなります。
Integer.parseIntの役割
数値入力で重要になるのが、Integer.parseInt です。
int age = Integer.parseInt(str);この文は、str に入っている文字列を整数に変換し、その結果を int型の変数 age に代入するという意味です。
分解して見ると、次のようになります。
| 部分 | 役割 |
|---|---|
| str | 入力された文字列 |
| Integer.parseInt(str) | 文字列を整数に変換する |
| int age = ... | 変換した整数を age に入れる |
たとえば、str に 20 という文字列が入っている場合、Integer.parseInt(str) によって整数の 20 に変換されます。
鬼殺隊風にたとえるなら、str は伝令の巻物、Integer.parseInt は「この巻物の文字を整数として読み直す係」、age は整数として記録する札です。
| 変換前 | 変換処理 | 変換後 |
|---|---|---|
| 文字列としての20 | Integer.parseInt(str) | 整数としての20 |
ここでのポイントは、入力された文字列をそのまま使っているのではなく、整数として使える形に変えてから利用していることです。
double型に変換したいとき
整数ではなく、小数を含む数値として扱いたい場合は、double型へ変換します。
そのときは、Double.parseDouble を使います。
double num = Double.parseDouble(str);この文は、str に入っている文字列を double型の数値に変換し、その結果を num に代入するという意味です。
| 変換したい型 | 書き方 | 用途 |
|---|---|---|
| int | Integer.parseInt(str) | 整数として使いたい |
| double | Double.parseDouble(str) | 小数として使いたい |
たとえば、3.14 のような小数を入力して計算に使いたい場合は、String型のままではなく、double型へ変換する必要があります。
鬼殺隊風に考えると、整数の任務番号として読むなら Integer.parseInt、小数を含む距離や割合として読むなら Double.parseDouble を使うイメージです。
今の段階では、次の対応を押さえておくと十分です。
| 入力内容をどう使いたいか | 使う変換 |
|---|---|
| 整数として使いたい | Integer.parseInt |
| 小数として使いたい | Double.parseDouble |
| 文字としてそのまま表示したい | 変換せずString型のまま使う |
図:入力された文字列を整数へ変換する流れ
↓クリックすると拡大表示されます。

この図が示していること
この図は、キーボードから入力された 20 が、最初は String型の文字列として受け取られ、そのあと Integer.parseInt によって int型の整数へ変換される流れを示しています。
入力された内容は、見た目が数字でも、readLine で受け取った直後は文字列です。数値として扱うには、変換処理を通す必要があります。
この図から分かること
標準入力から入ってきた値は、そのまま数値変数に入るわけではありません。
String型で受け取る段階と、int型へ変換する段階を分けて考えることが大切です。この違いがわかると、数値入力のコードが読みやすくなります。
図:標準入力と標準出力の全体像
↓クリックすると拡大表示されます。

この図が示していること
この図は、標準入力から値を受け取り、Javaプログラムの中で変数に入れ、必要に応じて変換し、標準出力へ結果を表示する流れを示しています。
キーボードは標準入力、画面は標準出力として考えられます。
この図から分かること
Javaの入出力は、入口と出口の流れで考えると理解しやすくなります。
標準入力から受け取った値は、変数に入り、必要なら型に合わせて変換されます。その後、System.out.println などを使って標準出力へ送られ、画面に表示されます。
入力をまちがえるとどうなるか
数値入力では、使う人が必ず正しい形式で入力してくれるとは限りません。
整数を入力してほしい場面で、小数や文字を入力してしまうことがあります。
たとえば、整数として変換したい場面で、次のような入力があると問題になります。
| 入力内容 | Integer.parseIntでの扱い |
|---|---|
| 20 | 整数として変換できる |
| 003 | 整数として変換できる |
| 3.14 | 整数としては変換できない |
| abc | 整数としては変換できない |
| 二十 | 整数としては変換できない |
Integer.parseInt は、整数として読める文字列を前提にしています。そのため、整数として解釈できない内容が入ってくると、うまく変換できません。
鬼殺隊風にたとえるなら、年齢を数字で報告してほしい場面で、隊士が「若いです」と伝えてきたようなものです。意味はわかりそうでも、Javaが整数として扱うには形式が合っていません。
ユーザーの入力ミスを考えることが大切
学習のはじめでは、まず正しい入力がされる前提で、基本の流れを理解すれば大丈夫です。
ただし、実際のプログラムでは、使う人がいつも正しく入力してくれるとは限りません。
整数を求めているのに文字を入力する。
小数を求めているのに記号を入力する。
何も入力せずに Enter キーを押す。
こうしたことは、実際のプログラムではよく起こります。
| 入力ミスの例 | 起こりうる問題 |
|---|---|
| 文字を入力する | 数値へ変換できない |
| 小数を入力する | 整数変換では扱えない |
| 空欄のままEnterを押す | 期待した値が得られない |
| 余計な記号を入れる | 変換できない |
本格的なプログラムでは、入力ミスがあったときにどう対応するかを考える必要があります。
たとえば、もう一度入力をうながす、エラーメッセージを表示する、処理を中止するなどの工夫があります。
今の段階では、入力にはまちがいが起こる可能性がある、と意識しておくことが大切です。この視点を早いうちから持っておくと、後で例外処理や入力チェックを学ぶときに理解しやすくなります。
標準入力と標準出力で見える入出力の流れ
標準入力と標準出力の視点で整理すると、Javaプログラムの流れがかなり見えやすくなります。
| 流れ | 内容 |
|---|---|
| 標準出力 | 画面にメッセージを表示する |
| 標準入力 | キーボードから文字列を受け取る |
| 変数 | 受け取った内容を保存する |
| 変換 | 必要に応じて文字列を数値に変える |
| 標準出力 | 結果を画面に表示する |
Sample5.javaの流れも、この形にきれいに当てはまります。
| 処理 | 入出力の見方 |
|---|---|
| 入力をうながす文を表示する | 標準出力 |
| キーボードから入力する | 標準入力 |
| str に文字列を入れる | 変数に保存 |
| age に整数を入れる | 変換後の値を保存 |
| 結果を表示する | 標準出力 |
鬼殺隊の任務でいえば、掲示板に指示を出し、隊士から報告を受け取り、報告内容を必要な形式に整え、最後に結果を掲示する流れです。
このように考えると、入力と出力は別々の知識ではなく、プログラム全体を動かす一連の流れとして理解できます。
これまで学んだ内容とのつながり
標準入力と標準出力は、新しい言葉に見えるかもしれません。
けれども、これまで学んできた内容としっかりつながっています。
| これまで学んだ内容 | 入出力とのつながり |
|---|---|
| 画面表示 | 標準出力として考えられる |
| キーボード入力 | 標準入力として考えられる |
| 変数 | 入力された値や変換後の値を保存する |
| String型 | 入力直後の文字列を受け取る |
| int型 | 変換後の整数を保存する |
| 代入 | 読み込んだ値や変換した値を変数に入れる |
画面に表示するのは標準出力です。
キーボードから受け取るのは標準入力です。
受け取った内容は変数に入ります。
必要なら型に合わせて変換します。
そして、その値をまた出力に使います。
この流れが見えるようになると、Javaの基本がばらばらの知識ではなく、ひとつのまとまりとして理解できるようになります。
Javaプログラムは、入力を受け取り、処理し、結果を出すものです。標準入力と標準出力は、その基本の形を支えている大切な考え方です。
