[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

情報処理IIIA(Javaプログラミング入門)第3回

目次 索引
3.1 コメントとインデント
3.1.1 コメント
3.1.2 インデント
3.2 式と演算子(1)
3.3 変数と代入文
3.3.1 変数とは
3.3.2 変数の初期化
3.3.3 変数の値の変更
3.4 演習3
3.5 レポート課題

3.1 コメントとインデント

3.1.1 コメント

プログラムの一部や全部の説明文がプログラムの中に書けますと、プログラムが理解しやすくなります。 このような説明文を コメント ( comment )とよびます。 Javaコンパイラは、プログラムに記号 // が現れますと、そこから行末までを無視します。 そこにコメントを書けば、プログラムに影響を与えずにプログラムが説明できます。 次のプログラムはコメントの使用例です。

class GoodMorning {
// b00a001, Kyoko Azuma, Sep. 20, 2001
    public static void main (String[] args) {
        System.out.println("Good morning!"); // Say good morning.
    }
}

また、記号 /* と */ に囲まれた部分も無視されます。 このふたつは同じ行にある必要はありませんので、たくさんの行を一度にコメント指定できます。 ただし、このコメントは入れ子にできません。 例えば、

System.out.println("Good morning!");
/*
    System.out.println("----------");
    System.out.println("----------");
*/
System.out.println("Good afternoon!");

という部分をコメント指定しようとして、

/*
    System.out.println("Good morning!");
    /*
        System.out.println("----------");
        System.out.println("----------");
    */
    System.out.println("Good afternoon!");
*/

と書きましても、最初の */ までがコメントだと見なされてしまいます。

3.1.2 インデント

プログラムの行頭の空白文字(字下げ)は インデント ( indent )とよばれます。 Javaコンパイラは行頭の空白文字を無視します。 インデントをうまく使いますと、プログラムの構造を見やすくできます。

上記のプログラムでインデントを用いませんと

class GoodMorning {
// b00a001, Kyoko Azuma, Sep. 20, 2001
public static void main (String[] args) {
System.out.println("Good morning!"); // Say good morning.
}
}

となります。 最後の2つの閉じブレース( } )がそれぞれどの開きブレース( { )に対応しているかが分かりにくいです。 インデントを用いずに長いプログラムを書きますと、ブレースの対応が分からなくなり、プログラムの構造を見えなくしてしまいます。


3.2 式と演算子(1)

前々回の授業では、スタンドアロン・アプリケーションの例として、端末エミュレータにGoodMorning!と出力するプログラムを動かしてみました。 また、前回は、アプレットの例として、絵を描くプログラムを作成しました。 今回は、再びスタンドアロン・アプリケーションに戻りまして、数(特に整数)を取り扱うことにします。

次のプログラムを動かしますと、端末エミュレータで以下のような出力が得られます。

ExpressionTest.java
/* 1*/ class ExpressionTest {
/* 2*/     public static void main (String[] args) {
/* 3*/         System.out.println(250 + 100);
/* 4*/         System.out.println(250 - 100);
/* 5*/         System.out.println(250 * 100);
/* 6*/         System.out.println(250 / 100);
/* 7*/         System.out.println(250 % 100);
/* 8*/         System.out.println(1000 + 250 * 3);
/* 9*/     }
/*10*/ }
b00a001@Ampere:~/java% javac ExpressionTest.java
b00a001@Ampere:~/java% java ExpressionTest
350
150
25000
2
50
1750
b00a001@Ampere:~/java%

プログラム中の 250 + 100 , 250 - 100 などは 式 ( expression )とよばれるものです。 プログラムを動かしますと、式が計算されているのが分かります。 ここで、記号 * が掛け算を表していることに注意してください。 また、記号 / は割り算を表していますが、この場合は2余り50という計算をして、2を計算結果としています。 余りを求めるには、 / の代わりに % を書きます。

+ , - , * , / , % などを 演算子 ( operator )とよびます。

表 3.1  整数( int 型)の演算子
記号 演算 例
+ 足し算 19 + 3⇒ 22
- 引き算 19 - 3⇒ 16
* 掛け算 19 * 3⇒ 57
/ 割り算 19 / 3⇒ 6
% 割った余り 19 % 3⇒ 1

上記の最後の出力を見ますと、式 1000 + 250 * 3 の計算は、はじめに掛け算をして、次に足し算をしていることが分かります。 これは、演算子 + より * のほうが優先順位が高いと決められていて、式は優先順位の高い演算子から順に計算されるからです。 もし、足し算を先に計算したければ、括弧を使って (1000 + 250) * 3 と書いてください。 この式の計算結果は3750となります。

演算子の優先順位を簡単に説明しますと、まず括弧の中が最優先で計算されます。 次に演算子 * , / , および % が優先します。 最も優先順位が低いのは、演算子 + と - です。 ここで注意すべきことは、 + と - は同じ優先順位であり、これらが続いているときは左から右に計算されることです。 例えば、式 5 - 3 + 1 は (5 - 3) + 1 と見なされ、3という計算結果になります。 演算子 * , / , % についても同様です。


3.3 変数と代入文

3.3.1 変数とは

プログラミングでは、 変数 ( variable )というものが重要な役割を果たします。 変数とは数などのデータが格納できる「入れ物」であると考えてください。 次の図は変数のイメージです。

An image of a variable
図 3.1  変数のイメージ

変数には名前がついています。 これを 変数名 ( variable name )とよびます。 この場合は x です。 また、変数にはデータがひとつ格納できます。 これを変数の 値 ( value )とよびます。 この場合、変数 x の値は100です。

変数を使えるようにするには、変数の 宣言 ( declaration )という手続きが必要です。 変数にデータを格納するには、 代入文 ( assignment statement )というものを用います。 変数に格納されたデータを取り出すには、式の中で数の代わりに変数名を書きます。

以下は変数を使ったプログラムの例です。

/* 1*/ class VariableTest {
/* 2*/     public static void main (String[] args) {
/* 3*/         int x;
/* 4*/         x = 100;
/* 5*/         System.out.println(x);
/* 6*/     }
/* 7*/ }
b00a001@Ampere:~/java% javac VariableTest.java
b00a001@Ampere:~/java% java VariableTest
100
b00a001@Ampere:~/java%

3行目では、変数の宣言を行って、変数を使えるようにしています。 変数名を x とし、ここに格納するデータの種類(型といいます)は整数( int 型)だと言っています。

4行目は代入文です。 変数 x にデータ100を格納します。 代入文は、一般に

variable = expression;

という形をとります。 式 expression の計算結果を変数 variable に格納するということです。 単なる数も式の一種だということに注意してください。

5行目は結果の出力です。 変数 x にはデータ100が格納されていますので、あたかも System.out.println(100); と書いたように振舞います。

なお、変数名はプログラマが決めます。 アルファベットの大文字か小文字で始まり、アルファベットの大文字、小文字、数字、アンダースコア(_)を並べた単語が使えます。 ただし、次の単語はJavaで特別な意味を持ちますので、変数名としては使えません。

Javaのキーワード
abstract , boolean , break , byte , byvalue , case , cast , catch , char , class , const , continue , default , do , double , else , extends , final , finally , float , for , future , generic , goto , if , implements , import , inner , instanceof , int , interface , long , native , new , operator , outer , package , private , protected , public , rest , return , short , static , super , switch , synchronized , this , throw , throws , transient , try , var , void , volatile , while

また、 null , true , false も変数名としては使えません。

次のプログラムはいくつかの変数を使う例です。

/* 1*/ class SomeVariables {
/* 2*/     public static void main (String[] args) {
/* 3*/         int temp1, temp2, temp3;
/* 4*/         temp1 = 300;
/* 5*/         temp2 = 200;
/* 6*/         temp3 = 4 * temp1 + 3 * temp2;
/* 7*/         System.out.println(temp3);
/* 8*/         System.out.println(4 * 300 + 3 * 200);
/* 9*/     }
/*10*/ }
b00a001@Ampere:~/java% javac SomeVariables.java
b00a001@Ampere:~/java% java SomeVariables
1800
1800
b00a001@Ampere:~/java%

3行目で、3つの変数 temp1 , temp2 , temp3 を宣言します。 これは、変数の宣言

int temp1;
int temp2;
int temp3;

をまとめたものです。 6行目で、変数 temp3 に式 4 * temp1 + 3 * temp2 の値を代入します。 変数 temp1 の値は300で、 temp2 の値は200ですので、4×300+3×200を計算して、この値1800が変数 temp3 に格納されます。

3.3.2 変数の初期化

前小節では次のようなプログラムを動かしました。

/* 1*/ class VariableTest {
/* 2*/     public static void main (String[] args) {
/* 3*/         int x;
/* 4*/         x = 100;
/* 5*/         System.out.println(x);
/* 6*/     }
/* 7*/ }

変数の宣言とデータの格納は一緒に行うことができます。 この操作を変数の 初期化 ( initialization )とよび、そのデータをその変数の 初期値 ( initial value )とよびます。 次のプログラムの3行目で、変数 x を100に初期化しています。

/* 1*/ class VariableTest2 {
/* 2*/     public static void main (String[] args) {
/* 3*/         int x = 100;
/* 4*/         System.out.println(x);
/* 5*/     }
/* 6*/ }

次のように書きますと、複数の変数が初期化できます。

int x = 100, y = 200;

次のように、変数の初期化と単なる宣言を混ぜることもできます。

int x = 100, y = 200, z;

3.3.3 変数の値の変更

今までの例では、変数に格納されたデータは特に変更されませんでした。 一般的には、変数に格納されたデータは何度も変更されます。

/* 1*/ class VariableTest3 {
/* 2*/     public static void main (String[] args) {
/* 3*/         int x = 100;
/* 4*/         x = x + 1;
/* 5*/         System.out.println(x);
/* 6*/     }
/* 7*/ }
b00a001@Ampere:~/java% javac VariableTest3.java
b00a001@Ampere:~/java% java VariableTest3
101
b00a001@Ampere:~/java%

このプログラムは、いったん変数 x にデータ100を格納した後、それを1増加させるものです。 4行目は、変数 x の値に1をたしたものを変数 x に格納する代入文です。 x と x + 1 が等しいと言っているわけではありません。 このイメージは次の図のようになります。

Incrementing a variable
図 3.2  変数の値の変更

変数の値を1増加させることは頻繁に行われますので、省略形が用意されています。 x++; で x = x + 1; と同じことが行われます。 変数の値を1減少させることにつきましても、 x = x - 1; を x--; と省略することができます。

/* 1*/ class VariableTest4 {
/* 2*/     public static void main (String[] args) {
/* 3*/         int x = 100, y = 200;
/* 4*/         x++;
/* 5*/         y--;
/* 6*/         System.out.println(x);
/* 7*/         System.out.println(y);
/* 8*/     }
/* 9*/ }
b00a001@Ampere:~/java% javac VariableTest4.java
b00a001@Ampere:~/java% java VariableTest4
101
199
b00a001@Ampere:~/java%

3.4 演習3

A子は自動販売機で120円の缶ジュースをいくつか買いました。 買う前にポケットの中を確認したところ、ちょうど千円ありました。 はじめに3本買いました。 ポケットの中身は640円になりました。 続いてもう1本買いました。 ポケットには520円が残りました。

この話を以下のプログラムで表します。 ???の部分を穴埋めして正しく動くようにしてください。 ただし、例えば7行目に pocket = 520; や pocket = 640 - 120; と書くのは反則とします。 また、値段を表す値120は変数(例えば price )に格納してこれを用いることとし、5行目と7行目に直接 120 とは書かないでください。

/* 1*/ class VendingMachine {
/* 2*/     public static void main (String[] args) {
/* 3*/         ???; // Initialize.
/* 4*/         System.out.println(pocket);
/* 5*/         ???; // Buy 3 cans.
/* 6*/         System.out.println(pocket);
/* 7*/         ???; // Buy 1 can.
/* 8*/         System.out.println(pocket);
/* 9*/     }
/*10*/ }
b00a001@Ampere:~/java% javac VendingMachine.java
b00a001@Ampere:~/java% java VendingMachine
1000
640
520
b00a001@Ampere:~/java%

3.5 レポート課題

今日の演習3に従ってJavaプログラムを作成し、そのプログラムをkonishi@twcu.ac.jpあてにメールで提出してください。 メールには、学生番号、氏名、科目名、授業日(10/4)を明記してください。


[小西ホームページ]   [目次・索引]   [前の授業]   [次の授業]

2001年10月4日更新
konishi@twcu.ac.jp
Copyright (C) 2001 Zenjiro Konishi. All rights reserved.