Javaプログラミング基礎

講義資料

Javaプログラムの例

最も簡単な Java のプログラムを示します。 次のプログラムを FirstProgram.java というファイル名で保存します。

class FirstProgram {
     public static void main(String[] args) {
          System.out.println("This is a my first Java program."); 
          System.out.println("Text can be displayed by using System.out.println."); 
     }
}

次に、以下のコマンドでコンパイルします。

$ javac FirstProgram.java

プログラムに誤りがありコンパイルに成功しなかった場合、 エラーメッセージが表示されます。 コンパイルが無事成功した場合は特に何も表示されません。

以下のコマンドを入力し、プログラムを実行してみましょう。

$ java FirstProgram

画面に次のような表示が出ます。

This is a my first Java program.
Text can be displayed by using System.out.println.

System.out.println の行のそれぞれのダブルクォーテーション (二重引用符) で、挟まれた部分が表示 (出力) されていることが分かります。

Java の基本的な約束ごと

上のプログラムの例を用いて、 Java のプログラムを書く際の最も基本的な約束ごとを説明します。

その他のプログラムを書く上での注意は、 教科書 p.xviii 「プログラム記述時の約束」を参照してください。

Java プログラムのコンパイルと実行

Java プログラムを動かすためには、 次の 2 つのステップの作業を行う必要があります。

  1. コンパイル

    テキスト形式で書かれたプログラム (ソースファイル) を、 コンピュータが解釈し実行できる形式に変換します。 コンパイルの結果生成される実行可能な形式のファイルをクラスファイルと呼びます。

    具体的には、以下のコマンドを入力します。

    $ javac [ファイル名 (〜.java) ]
    
  2. 実行

    コンパイルによって生成されたクラスファイルを、実際に実行します。

    具体的には、以下のコマンドを入力します。

    $ java [プログラム名 (.java はつけない) ]
    

プログラミングの基本的な手順は、 教科書 pp.xvi-xvii も参照してください。 なお、教科書では Windows 上のコマンドプロンプトを用いた方法が説明されていますが、 基本的な手順は Windows でも Linux でも同様です。

変数

教科書 pp.6-7 を参照してください。

変数は Java などの言語によるプログラミングの中心となる概念です。

変数は、値を入れる箱のようなものであり、 それぞれの変数には名前がつけられています。 一つの変数には、ある時点で一つの値しか入れることができません。 すでに値が入っている変数に別の値を入れると、 前の値は失われます。

プログラムでは、変数に値を入れたり、 入っている値を取り出したりしながら計算を進めていきます。 プログラムにおける変数は、時々刻々と値が変わっていくものなのです。

プログラムで変数に値を入れることを「代入」と言います。 代入は次の形式で書きます。

変数 = 式 ;

イコールが代入を表す記号です。 イコールは、数学では「等しい」という意味を表す記号でしたが、 Java では、変数に値を入れるという意味になります (Java で「等しい」ことを表す記号は別にあります)。

イコールの左 (左辺) には変数の名前を書き、 右 (右辺) には式を書きます。 式を計算した結果の値が変数に代入されます。 たとえば、

x = 100;

とすると、値 100 が変数 x に代入されます。 代入の前に x に入っていた値は消えてなくなります。

代入の右辺にはもっと複雑な式を書くこともできます。

variable = 3 * x + 1;

上の例は、変数 x の値を 3 倍してそれに 1 を加えた値を、 変数 variable に代入します。 この時点での x の値が 100 であれば、 variable には 301 が代入されることになります。 このように、右辺には、普通の四則演算の式なら何でも書くことができます。

ただし、掛け算を「×」や「・」ではなく * (アステリスク) で表したり、 割り算を「÷」や分数ではなく、 / (スラッシュ) で表すことなどに注意が必要です。 また、数学の式のような中カッコや大カッコの使い方はできません。 小カッコを重ねて書くことで、演算の優先順位を示すことができます。 以下に例を示します。

3 * 2  // ←3×2の計算
3 / 2  // ←3÷2の計算
4 * (3 / (2 + 1))  // ←4×{3÷(2+1)}の計算

代入の右辺の中に左辺と同じ変数があっても構いません。例えば、

x = x + 1;

という (数学の常識では奇妙な) 書き方が可能です。 この意味は、x1 の和を 新たな x の値として代入する、ということです。 「元の x の値を 1 増やす」と解釈すると良いでしょう。 例えば、x が 10 であった場合、 11 が新たに x に代入され、古い 10 という値は消えてしまいます。

変数の宣言

プログラムで使う変数は、 あらかじめ「このプログラムでは、この名前の変数を使うのだ。」というように 宣言しておく必要があります。これを「変数宣言」と呼びます。 変数宣言は、たとえば次のように書きます。

int x;
int alpha, beta, gamma;
int september12;

キーワード int の後に宣言した変数の名前を並べて書きます。 変数名が 2 つ以上ある場合は、コンマ (,) で区切り、 最後にセミコロンを書きます。

変数の名前は、最初の 1 文字がアルファベットである必要があります。 2 文字目以降はアルファベット、数字を用いることができます。 また、アルファベットの小文字と大文字は区別されます。 たとえば Aa は別の変数です。 変数名に日本語を用いることもできますが、 いろいろなトラブルの元になるので、 避けた方が良いでしょう。

正しい変数の名前と誤った変数の名前の例を以下に示します。

正しい例

i
sum
value1

誤った例

3people
dendai.ac.jp
tom&jerry

変数の名前は、その変数の意味を反映した分かりやすい名前にすべきです。

変数宣言と同時に、変数に値を入れておくこともできます。 これを「初期化」と言います。たとえば、

int x = 100;
int alpha = 100, beta = 200, gamma = 300;

のように、変数名のあとにイコールを書き、 初期化したい値を書いておきます。

変数には「型」があります。 これは、その変数にどんな種類の値を入れることができるかを表すものです。 今のところは整数値を入れる変数だけを扱うことにします。 実は int というキーワードは、 integer (整数) の略です。 Java では、整数以外の値を扱うための変数もあり、 その場合は int 以外の方法で宣言します。

例題: 2 つの値の和を求める

簡単なプログラムの例を示します。 このプログラムは x, y の 2 つの変数の和を求める働きをします。 (ファイル名は SumOfTwo.java とします)

class SumOfTwo {
    public static void main(String[] args) {
        int x = 10, y = 20;

        int sum;
	sum = x + y;

        System.out.println("x + y = " + sum);
    }
}

このプログラムの動きを追ってみましょう。

まず、x, y はそれぞれ 10 と 20 の値で初期化されています。

sum = x + y が実行されると、 sum の値は x の値 10 と y の値 20 の和の 30 となります。

例題: 3 つの値の合計を求める(1)

次のプログラムの例を示します。 このプログラムは x, y, z の 3 つの変数の和を求める働きをします。 (ファイル名は SumOfThree.java とします)

class SumOfThree {
    public static void main(String[] args) {
        int x = 10, y = 20, z = 30;

        int sum;
        sum = x + y + z;
        System.out.println("x + y + z = " + sum);
    }
}

先ほどの例と同様の考え方で、 x, y, z の和を求め、 sum に代入しています。

例題: 3 つの値の合計を求める(2)

先ほどと同様の x, y, z の 3 つの変数の和を求めるプログラムとして次の例を考えてみましょう。 (ファイル名は SumOfThree2.java とします)

class SumOfThree2 {
    public static void main(String[] args) {
        int x = 10, y = 20, z = 30;

        int sum = 0;
        sum = sum + x;
        sum = sum + y;
        sum = sum + z;

        System.out.println("x + y + z = " + sum);
    }
}

このプログラムの動きを追ってみましょう。

まず、x, y, z は、 それぞれ 10, 20, 30 の値で初期化され、 sum は 0 で初期化されています。

sum = sum + x; が実行されると、 sum の値は 0 + 10 で 10 となります。

次に、sum = sum + y; が実行されると、 sum の値は、元の sum の値が 10 であることから、 10 + 20 で 30 となります。 この時点で sum には xy の合計が入っていることになります。

さらに、sum = sum + z; が実行されると、 sum の値は、元の sum の値が xy の和の 30 であることから、 30 + 30 で 60 となります。 これで、 sum には x, y, z の合計が 入っていることになります。所期の目的が達成できたというわけです。

この例題の 3 つの代入文は、いずれも sum = sum + 変数; の形をしています。 これは、sum の古い値に変数の値を加えて、 その結果を sum に代入する (戻す) ことを意味しています。

つまり、 sum に各変数の値を次々足し込んでいることになります。 0 に x, y, z の値をそれぞれ順に足し込めば、 最終的に 3 つの値の総和が求まるわけです。

具体的には、

        int sum = 0;
        sum = sum + x;
        sum = sum + y;
        sum = sum + z;

上のプログラムを文章で表わすと、次のように説明することができます。

最初の sum の値は 0 とする。
前の時点の sum の値に x の値を足し込む。sum の値は x となる。
前の時点の sum の値に y の値を足し込む。sum の値は x と y の和となる。
前の時点の sum の値に z の値を足し込む。sum の値は x と y と z の和となる。
(結果として sum には x, y, z の総和が求まった。めでたし。)

このプログラムは、前のプログラムと比較して複雑なプログラムになっています。 しかし、この考え方が無駄であるとは言えません。 ある意味で、このプログラムの方が プログラムの書き方の本質を表しているとも言えます。 たとえば、 3 個ではなく 100 個の和を求めるときは、 これに近い考え方をすることになります。