復習 (1)

今回の内容

今回は「入出力」から「手続き」までの復習を行います。知識に抜けがないかチェックしておきましょう。

復習

入出力

入出力」の回では、入力ダイアログとメッセージダイアログを表示する簡単なプログラムを紹介しました。

package j1.review01;

import javax.swing.JOptionPane;

public class First {

    public static void main(String[] args) {
        new First().start();
    }

    void start() {
        String input = JOptionPane.showInputDialog("メッセージをどうぞ");
        JOptionPane.showMessageDialog(null, input);
    }
}

プログラムの基本的な構造は「入力された値を処理し、結果を出力する」という「入力→処理→出力」の流れです。この回ではそのうち、「入力された値を(ほとんど)そのまま出力する」といった非常に単純なものを紹介しました。

図: プログラムとその周辺

また、このコースではメソッドを紹介する手前のところまで、次のようなプログラムの「ひな型」を利用しています。

package <パッケージの名前>;
import javax.swing.JOptionPane;
public class <クラスの名前> {
    public static void main(String[] args) {
        new <クラスの名前>().start();
    }
    void start() {
        <命令>
    }
}

プログラムは、void start() {…}というstartメソッドのうち、ブロックと呼ばれる{…}の部分を書き換えていくつかの命令を書きます。ここでメッセージを表示する際には次のように書きます。

JOptionPane.showMessageDialog(null, <表示させる文字列>);

また、入力ダイアログを表示するには次のように書きます。

String <入力を記憶させる名前> = JOptionPane.showInputDialog(<表示させる文字列>);

式と変数

式と変数」の回では、整数や実数、文字列などの値や、それらを計算で組み合わせる方法、変数を宣言してそれらの値を記憶させる方法などを紹介しました。

package j1.review01;

import javax.swing.JOptionPane;

public class CircleArea {

    public static void main(String[] args) {
        new CircleArea().start();
    }

    void start() {
        String input = JOptionPane.showInputDialog("円の半径を入力");
        double radius = Double.parseDouble(input);
        JOptionPane.showMessageDialog(null, radius * radius * 3.14);
    }
}

このプログラムには「"円の半径を入力"」や「3.14」のようにプログラムで書いたとおりの値を利用するための「リテラル」というものが含まれています。この回では、次の3種類のリテラルを紹介しました。

  • 文字列を表すリテラル ("と"で囲む, "こんにちは!" など)
  • 整数を表すリテラル (0から9までの数字の列, 12345 など)
  • 実数を表すリテラル (途中に.を含む数字の列, 3.141592 など)

また、入力された値など、あとで使う値を「変数」に記憶させています。これらを利用するにはプログラム中で次のように「変数の宣言」を行います。

String <変数名> = <文字列>;
int <変数名> = <整数>;
double <変数名> = <実数>;

変数に記憶させた値を利用するには、リテラルの代わりに宣言した変数の名前を指定します。なお、String, int, double をそれぞれ変数の「型」と呼び、変数に記憶させられる値の種類は、それぞれ型ごとに決められています。

その他に、整数や実数のリテラルや変数を組み合わせて、新しい値を作りだす方法を紹介しました。上記の例では、円の面積を求めるために「radius * radius * 3.14」という計算を行っています。

Javaでの書き方 算数での書き方 意味
a + b a + b aとbの和 (文字列を含む場合はaとbの結合)
a – b a - b aとbの差
a * b a × b aとbの積
a / b a ÷ b aとbの商

なお、入力ダイアログに入力された値は、文字列として取り扱うことになります。文字列のままでは上記のような計算が行えないため、整数や実数に変換して利用する方法を紹介しました。

int <変数名> = Integer.parseInt(<文字列>);
double <変数名> = Double.parseDouble(<文字列>);

条件分岐

条件分岐」の回では、コンピューターに簡単な「判断」を行わせるプログラムを紹介しました。

package j1.review01;

import javax.swing.JOptionPane;

public class SelectQuiz2 {

    public static void main(String[] args) {
        new SelectQuiz2().start();
    }

    void start() {
        String input = JOptionPane.showInputDialog("条件分岐をするには?"
            + "(1) if文 "
            + "(2) for文 ");
        int answer = Integer.parseInt(input);
        if (answer == 1) {
            JOptionPane.showMessageDialog(null, "正解です");
        }
        else if (answer == 2) {
            JOptionPane.showMessageDialog(null, "不正解です");
        }
        else {
            JOptionPane.showMessageDialog(null, "無効な値です");
        }
    }
}

条件分岐は、次のようにif文を使います。

if (<条件式>) {
    <条件式が成立する場合の命令>
}
else {
    <条件式が成立しない場合の命令>
}
図: フローチャート(if-flow, 再掲)

このうち、{ … }となっている部分を「ブロック」と呼び、ブロックの中には複数の命令を書くことができます。3つ以上に分岐する場合には、elseに続くブロックの代わりに別のif文を書きます。

if (<1つ目の条件式>) {
    <1つ目の条件が成立する場合の命令>
}
else if (<2つ目の条件式>) {
    <2つ目の条件が成立する場合の命令>
}
else if (<3つ目の条件式>) {
    <3つ目の条件が成立する場合の命令>
}

else {
    <全ての条件が成立しない場合の命令>
}

また、条件式では次のような値の比較を行えます。

Javaでの書き方 数学での書き方 意味
a == b a = b aはbと等しい
a != b a ≠ b aはbと等しくない
a < b a < b aはbより小さい
a > b a > b aはbより大きい
a <= b a ≦ b aはbより小さいか、等しい (以下)
a >= b a ≧ b aはbより大きいか、等しい (以上)

他には、この条件式を組み合わせて複雑な条件式を表現する方法についても紹介しました。

Javaでの書き方 数学での書き方 意味
A && B A ∩ B AかつB
A || B A ∪ B AまたはB

手続き

手続き」の回では、命令のかたまりを「メソッド」として切り出して、プログラムを分割する方法について紹介しました。

package j1.review01;

import javax.swing.JOptionPane;

public class QuizMethod {

    public static void main(String[] args) {
        new QuizMethod().start();
    }

    void start() {
        showQuiz("10 + 20 = ?", 30);
        showQuiz("リンゴの色は? (1) 青 (2) 赤", 2);
        showQuiz("うるう年の1年の日数は?", 366);
    }

    void showQuiz(String message, int correct) {
        String input = JOptionPane.showInputDialog(message);
        int answer = Integer.parseInt(input);
        if (answer == correct) {
            JOptionPane.showMessageDialog(null, "正解です");
        }
        else {
            JOptionPane.showMessageDialog(null, "不正解です");
        }
    }
}

メソッドを利用するには、まず次の形で「メソッドの宣言」を書きます。

void <メソッドの名前>(<仮引数1>, <仮引数2>, …) {
    <命令>
}

このメソッドに含まれる{ <命令> }の部分をブロックと呼びます。このブロックに含まれる命令はいくつでもよく、それぞれ上から順に処理されます。これらの命令を実行するには、該当するメソッドを下記の形式で起動します。

<メソッドの名前>(<実引数1>, <実引数2>, …);

すると、同じ名前を持つメソッドが起動し、それぞれの仮引数には対応する実引数の値が記憶されます。仮引数は通常の変数のように扱えますので、メソッドを起動する際に渡された値を、起動先のメソッドで利用できます。

達成度の確認

以下それぞれの項目について、問題ないか確認してみましょう。不安な要素があればそれぞれの回をさらに復習してください。