目次 | 索引 |
---|---|
プログラムの一部や全部の説明文がプログラムの中に書けますと、プログラムが理解しやすくなります。
このような説明文を
コメント
(
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
)とよびます。
記号 | 演算 | 例 |
---|---|---|
+ |
足し算 | 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)を明記してください。