目次 | 索引 |
---|---|
javaコマンドでプログラムを実行するさいに、プログラムにデータを渡すことができます。 次のプログラムは、渡されたデータをそのまま出力するものです。
/* 1*/ class FirstArgument { /* 2*/ public static void main (String[] args) { /* 3*/ int x = Integer.parseInt(args[0]); /* 4*/ System.out.println(x); /* 5*/ } /* 6*/ }
b00a001@Ampere:~/java% java FirstArgument 100 100 b00a001@Ampere:~/java% java FirstArgument 200 200 b00a001@Ampere:~/java%
データの渡し方は、javaコマンドにそのデータを追加して入力します。
このデータを
コマンドライン引数
とよびます。
プログラムでは、式
Integer.parseInt(args[0])
がコマンドライン引数を表します。
注意:
コマンドライン引数を入力しなかったり、整数(
int
型)でないものを入力した場合、式
Integer.parseInt(args[0])
の部分でエラーが発生します。
また、コマンドライン引数を複数入力しても、この式で取り出せるのは最初の一つだけです。
ちゃんとしたプログラムを書くには、コマンドライン引数の個数を確かめ、それが整数であることを確認する必要があります。
コマンドライン引数と同様に、アプレットに対してもデータを渡すことができます。 このデータは、アプレット・パラメタとよばれます。 「引数」と「パラメタ」は同じ概念だと思ってください。
次のプログラムは、円の中心座標と半径のデータを受け取り、そのような円を描くアプレットです。
/* 1*/ import java.applet.*; /* 2*/ import java.awt.*; /* 3*/ /* 4*/ public class DrawCircle extends Applet { /* 5*/ public void paint (Graphics g) { /* 6*/ int x = Integer.parseInt(getParameter("centerx")); /* 7*/ int y = Integer.parseInt(getParameter("centery")); /* 8*/ int r = Integer.parseInt(getParameter("radius")); /* 9*/ g.setColor(Color.black); /*10*/ g.drawOval(x - r, y - r, 2 * r, 2 * r); /*11*/ } /*12*/ }
<html> <head> <title>Drawing circles</title> </head> <body> <hr> <applet code="DrawCircle.class" width="300" height="100"> <param name="centerx" value="70"> <param name="centery" value="50"> <param name="radius" value="40"> </applet> <hr> <applet code="DrawCircle.class" width="300" height="100"> <param name="centerx" value="100"> <param name="centery" value="50"> <param name="radius" value="30"> </applet> <hr> </body> </html>
アプレットに渡すデータは、HTMLドキュメントの中に書きます。
HTMLドキュメントを書くために、まず、データに名前をつけます。
ここでは、円の中心の
x
座標は
centerx
、
y
座標は
centery
、円の半径は
radius
です。
次に、
<param>
タグを用い、
<param name="name" value="value">
という形式で、名前とデータの対応を表します。 この例では、座標 (70, 50), 半径 40 ですので、
<param name="centerx" value="70"> <param name="centery" value="50"> <param name="radius" value="40">
となります。
なお、
<param>
タグに終了タグはありません。
最後に、これを
<applet>
タグで囲みます。
アプレットでデータを受け取るには、式
Integer.parseInt(getParameter("name"))
を用います。
上記のプログラムの6行目から8行目で、変数
x
,
y
,
r
のそれぞれに、円の中心の
x
座標、
y
座標、円の半径が格納されています。
if
文今までのプログラムは、書いてあることを無条件に順次実行するものばかりでした。 プログラムの構成要素には、このほかにも「もし何々が成り立つならば何々する」というようなものがあります。 これを 選択文 ( selective statement )、あるいは 条件文 ( conditional statement )とよびます。
次のプログラムは、もしコマンドライン引数が負の数ならばThat is a negative number.と出力するものです。
4行目の
temp < 0
の部分が、「負の数ならば」という条件を表しています。
/* 1*/ class NegativeNumber { /* 2*/ public static void main (String[] args) { /* 3*/ int temp = Integer.parseInt(args[0]); /* 4*/ if (temp < 0) { /* 5*/ System.out.println("That is a negative number."); /* 6*/ } /* 7*/ } /* 8*/ }
b00a001@Ampere:~/java% java NegativeNumber 100 b00a001@Ampere:~/java% java NegativeNumber -30 That is a negative number. b00a001@Ampere:~/java%
「もし何々が成り立つならば何々する」という選択は、
if
文を使うと書けます。
if
文は次のような形をとります。
条件
condition
が成り立つならば、
statement1
,
statement2
,
statement3
, ... を実行します。
if (condition) { statement1; statement2; statement3; ... }
if
文の中に、さらに
if
文を書くこともできます。
次のプログラムは、コマンドライン引数が3桁の数ならばThat is a number of three figures.と出力するものです。
4行目で「
x
は100以上」という条件が課され、5行目で「
x
は999以下」という条件が課されますので、6行目は、
x
が100以上999以下の場合、すなわち3桁の数の時に実行されます。
記号
>=
,
<=
はそれぞれ≧, ≦に対応します。
/* 1*/ class ThreeFigures { /* 2*/ public static void main (String[] args) { /* 3*/ int x = Integer.parseInt(args[0]); /* 4*/ if (x >= 100) { /* 5*/ if (x <= 999) { /* 6*/ System.out.println("That is a number of three figures."); /* 7*/ } /* 8*/ } /* 9*/ } /*10*/ }
b00a001@Ampere:~/java% java ThreeFigures 55 b00a001@Ampere:~/java% java ThreeFigures 555 That is a number of three figures. b00a001@Ampere:~/java%
上記の例では、条件として
temp < 0
や
x >= 100
を書きました。
条件は、
関係演算子
(
relational operator
)や
論理演算子
(
logical operator
)を用いて構成されます。
関係演算子は次の通りです。
記号 | 関係 | 例 |
---|---|---|
> |
大きい | 19 > 3 ⇒ true |
< |
小さい | 19 < 3 ⇒ false |
>= |
以上 | 19 >= 3 ⇒ true |
<= |
以下 | 19 <= 3 ⇒ false |
== |
等しい | 19 == 3 ⇒ false |
!= |
等しくない | 19 != 3 ⇒ true |
等しい関係は記号
==
で表すことに注意してください。
記号
=
では代入文になります。
実は、条件は式の一種です。 式の値がtrueになることが、条件が成り立つことを意味します。 式の値がfalseになることが、条件が成り立たないことを意味します。
論理演算子を使いますと、より複雑な条件が書けます。
記号 | 論理演算 | 例 |
---|---|---|
&& |
かつ | 16 > 5 && 4 == 7 ⇒ false |
|| |
または | 16 > 5 || 4 == 7 ⇒ true |
! |
〜でない | !(4 == 7) ⇒ true |
記号
&&
は、ふたつの条件を結んで新しく条件を作ります。
これは、両方の値がtrueになるときtrueという値を持ち、そうでないときfalseという値を持ちます。
記号
||
も、ふたつの条件を結びます。
これは、一方(両方でもよい)の値がtrueになるときtrueという値を持ち、そうでないときfalseという値を持ちます。
記号
!
は、ひとつの条件から新しく条件を作ります。
これは、trueをfalseに、falseをtrueに変えます。
これまでに説明した演算子の優先順位は次のようになります。 分からなくなりそうでしたら、括弧を使って計算順序を明示するのがよいでしょう。
! - (単項) |
* / % |
+ - |
> < >= <= |
== != |
&& |
|| |
ここで、単項の
-
とは、式
-1 + x
などの
-
のことです。
次のプログラムでは、100以上999以下というひとつの条件で3桁の数を判定します。
/* 1*/ class ThreeFigures2 { /* 2*/ public static void main (String[] args) { /* 3*/ int x = Integer.parseInt(args[0]); /* 4*/ if (100 <= x && x <= 999) { /* 5*/ System.out.println("That is a number of three figures."); /* 6*/ } /* 7*/ } /* 8*/ }
注意:
4行目の条件を
100 <= x <= 999
と書くことはできません。
if
-else
文(1)
選択の中には、「もし何々が成り立つならば何々する。成り立たないならば何々する。」というものもあります。
この選択には、
if
-
else
文を使います。
次のプログラムは、コマンドライン引数が偶数ならばThat is an even number.と出力し、そうでないならばThat is an odd number.と出力するものです。
/* 1*/ class EvenOdd { /* 2*/ public static void main (String[] args) { /* 3*/ int x = Integer.parseInt(args[0]); /* 4*/ if (x % 2 == 0) { /* 5*/ System.out.println("That is an even number."); /* 6*/ } else { /* 7*/ System.out.println("That is an odd number."); /* 8*/ } /* 9*/ } /*10*/ }
b00a001@Ampere:~/java% java EvenOdd 12 That is an even number. b00a001@Ampere:~/java% java EvenOdd 15 That is an odd number. b00a001@Ampere:~/java%
if
-
else
文は次のような形をとります。
条件
condition
が成り立つならば、
statement1
, ...を実行します。
成り立たないならば、
statement2
, ...を実行します。
if (condition) { statement1; ... } else { statement2; ... }
if
-else
文(2)「何々が成り立つならば何々する。 そうでなくて、何々が成り立つならば何々する。 どちらも成り立たないならば何々する。 」というような選択は、プログラミングでよく用いられます。 これは次のように書きます。
if (condition1) { statement1; ... } else if (condition2) { statement2; ... } else { statement3; ... }
条件 condition1 が成り立つならば、 statement1 ...が実行されます。 条件 condition1 が成り立たなくて、条件 condition2 が成り立つならば、 statement2 ...が実行されます。 条件 condition1 も condition2 も成り立たないならば、 statement3 ...が実行されます。
条件がより多い場合は次のようになります。 条件 condition1 , condition2 ,...と順に確かめていき、はじめて成り立つ条件が condition_i ならば、 statement_i ...が実行されます。 どの条件も成り立たないならば、 statement_n+1 ...が実行されます。
if (condition1) { statement1; ... } else if (condition2) { statement2; ... } else if (condition3) { statement3; ... } ... else if (condition_n) { statement_n; ... } else { statement_n+1; ... }
次のプログラムは、コマンドライン引数として試験の得点を入力しますと、その評価を出力するものです。 90点以上100点以下ならばAを、80点以上90点未満ならばBを、70点以上80点未満ならばCを、60点以上70点未満ならばDを、0点以上60点未満ならばFを、それぞれ出力します。 どの条件も成り立たない場合は、入力が間違っていますので、Illegal scoreと出力します。
/* 1*/ class ScoreGrade { /* 2*/ public static void main (String[] args) { /* 3*/ int score = Integer.parseInt(args[0]); /* 4*/ if (90 <= score && score <= 100) { /* 5*/ System.out.println("A"); /* 6*/ } else if (80 <= score && score < 90) { /* 7*/ System.out.println("B"); /* 8*/ } else if (70 <= score && score < 80) { /* 9*/ System.out.println("C"); /*10*/ } else if (60 <= score && score < 70) { /*11*/ System.out.println("D"); /*12*/ } else if (0 <= score && score < 60) { /*13*/ System.out.println("F"); /*14*/ } else { /*15*/ System.out.println("Illegal score"); /*16*/ } /*17*/ } /*18*/ }
b00a001@Ampere:~/java% java ScoreGrade 85 B b00a001@Ampere:~/java% java ScoreGrade 78 C b00a001@Ampere:~/java% java ScoreGrade -10 Illegal score b00a001@Ampere:~/java%
JavaプログラムBarGraph.javaを作成して、以下のイメージのような、売上目標と実績を棒グラフで表すホームページを完成させてください。 HTMLドキュメントは以下のものを用いることにします。 棒グラフの部分は画像ファイルではなくアプレットです。 また、一つのアプレットを4か所で用いています。
このアプレットは、はじめに売上目標(
target
)と売上実績(
result
)を
<param>
タグから取得します。
そして、売上実績が目標を超えていたら、青で棒グラフを描きます。
目標以下でしたら赤です。
最後に、目標の位置に黒で印を付けます。
棒グラフは、1億円を1ピクセルで表すことにします。
また、アプレットの大きさは、幅200ピクセル、高さ20ピクセルと仮定してください。
なお、ホームページのデザインを変更してもかまいませんが、目標超過/以下の区別を明確にし、売上目標を分かりやすく表してください。
<html> <head> <title>A bar graph</title> </head> <body> <div> 売上目標と実績<br> (単位は億円、黒は目標、青は目標超過、赤は目標以下) </div> <table border="1"> <tr> <th>年</th><th>目標</th><th>実績</th><th>グラフ</th> </tr> <tr> <td>1997</td><td>100</td><td>130</td> <td> <applet code="BarGraph.class" width="200" height="20"> <param name="target" value="100"> <param name="result" value="130"> </applet> </td> </tr> <tr> <td>1998</td><td>110</td><td>100</td> <td> <applet code="BarGraph.class" width="200" height="20"> <param name="target" value="110"> <param name="result" value="100"> </applet> </td> </tr> <tr> <td>1999</td><td>120</td><td>140</td> <td> <applet code="BarGraph.class" width="200" height="20"> <param name="target" value="120"> <param name="result" value="140"> </applet> </td> </tr> <tr> <td>2000</td><td>130</td><td>110</td> <td> <applet code="BarGraph.class" width="200" height="20"> <param name="target" value="130"> <param name="result" value="110"> </applet> </td> </tr> </table> </body> </html>
今日の演習4に従ってJavaプログラムを作成し、そのプログラムをkonishi@twcu.ac.jpあてにメールで提出してください。 メールには、学生番号、氏名、科目名、授業日(10/11)を明記してください。