| 目次 | 索引 |
|---|---|
プログラムの一部や全部の説明文がプログラムの中に書けますと、プログラムが理解しやすくなります。
このような説明文を
コメント
(
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!");
*/
と書きましても、最初の
*/
までがコメントだと見なされてしまいます。
プログラムの行頭の空白文字(字下げ)は インデント ( 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つの閉じブレース(
}
)がそれぞれどの開きブレース(
{
)に対応しているかが分かりにくいです。
インデントを用いずに長いプログラムを書きますと、ブレースの対応が分からなくなり、プログラムの構造を見えなくしてしまいます。
前々回の授業では、スタンドアロン・アプリケーションの例として、端末エミュレータにGoodMorning!と出力するプログラムを動かしてみました。 また、前回は、アプレットの例として、絵を描くプログラムを作成しました。 今回は、再びスタンドアロン・アプリケーションに戻りまして、数(特に整数)を取り扱うことにします。
次のプログラムを動かしますと、端末エミュレータで以下のような出力が得られます。
/* 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
)とよびます。
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という計算結果になります。
演算子
*
,
/
,
%
についても同様です。
プログラミングでは、 変数 ( variable )というものが重要な役割を果たします。 変数とは数などのデータが格納できる「入れ物」であると考えてください。 次の図は変数のイメージです。
変数には名前がついています。
これを
変数名
(
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で特別な意味を持ちますので、変数名としては使えません。
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
に格納されます。
前小節では次のようなプログラムを動かしました。
/* 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;
今までの例では、変数に格納されたデータは特に変更されませんでした。 一般的には、変数に格納されたデータは何度も変更されます。
/* 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
が等しいと言っているわけではありません。
このイメージは次の図のようになります。
変数の値を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%
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に従ってJavaプログラムを作成し、そのプログラムをkonishi@twcu.ac.jpあてにメールで提出してください。 メールには、学生番号、氏名、科目名、授業日(10/4)を明記してください。