目次

標準入出力を使う

標準出力に出力する

参考:教科書 p18 2.1 画面への出力

今まで、画面に何かを表示する時に、System.out.printlnもしくは System.out.print を使った。 これは、正確にいうと標準出力に与えられた文字列を出力するメソッドである。
※ 標準出力と標準入力については、
UNIXの標準入出力とリダイレクションを参照せよ。

        System.out.print("Hello,");
        System.out.println("world");

と、

        System.out.println("Hello,world");

が同じ結果になるのは、System.out.printが最後に改行しないからである。

上でSystem.out.println(とprint)は与えられた文字列を出力すると書いた。では、 iが整数型の変数である場合、System.out.println("i = " + i)の + とは一体なんであろうか。 実はこの + は、数値の足し算ではなく、文字列の連結を意味する。例えば、"Hello " + "Japan"は 結果として "Hello Japan" となる。

なお、連結するものの中に文字列以外の値があるときには、 その値が文字列に変換される。つまり、"i = " + i は、例えば変数iの値が100のとき、文字列 の100つまり"100"に変換されて、"i = "とつながる、つまり、"i = " + "100" と書いたのと 同じになり、結果として "i = 100" となる。これが画面に表示されるわけである。

※ + を使うとき、数値 + 数値 である場合は、数値の足し算を行う。

演習

        System.out.println(100 + 20);
        System.out.println("100" + 20);
        System.out.println(100 + "20");
        System.out.println(10 + 100 + "20");
        System.out.println("10" + 100 + 20);
それぞれの行の出力がなぜそのような結果になったのかを説明せよ。

標準入力からデータを得る

参考:教科書 p61 3.6 キーボードからの入力

今まで説明したプログラムでは、データの値をプログラムの中に直接打ち込んでいた。 これでは、値を変えるたびにプログラムを編集して、コンパイルし直さなければならない。 プログラム以外のファイルや、実行時にキーボードから値を入力できると、扱えるデータが飛躍的に幅広くなる。

標準入力からデータを入力するようにするには、以下のようにする。

import java.io.*;
public class StdInput {
    public static void main(String[] args) throws IOException {
        String s;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        s = buf.readLine();
        System.out.println("input data is " + s);
    }
}

説明は割愛するが、これで標準入力から一行読み込んで、文字列型の変数sに代入される。

あくまでも、読み込まれるものは文字列である。つまり、キーボードから123と入力した場合 、それは整数の123ではなく、文字列の"123"として扱われる。これを整数値として扱いたい場合は、 文字列から整数値に変換する Integer.parseInt を使用する。

import java.io.*;
public class StdInput {
    public static void main(String[] args) throws IOException {
        String s;
        int i;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        s = buf.readLine();
        i = Integer.parseInt(s);
        System.out.println("input number is " + i);
    }
}

なお、文字列から浮動小数点数に変換したい場合は、Interger.parseIntのかわりに Float.parseFloat あるいは Double.parseDouble を使えばよい。



ohmi mackin