目次 | 索引 |
---|---|
これまで、「ターミナル」にデータを出力するには、
System.out.println(
data);
を使ってきました。
文字列をそのまま出力するには、
data
の部分にその文字列をダブルクオート(
"
)で囲んで書き、変数の値を出力するには、そこにその変数名を書きました。
System.out.println(
data
);
は、出力の後に改行します。
改行してほしくないときは、
System.out.print(
data);
と書きます。
また、改行だけしてほしいときは、
System.out.println();
とします。
注意:
「ターミナル」への出力は一文字ずつ行なわれるわけではなく、ある程度の文字数になるか改行があるとまとめて行なわれます。
System.out.print(
data
);
と書いてあるのに何も出力されないときは、改行
System.out.println();
を忘れていないか確認してください。
javaコマンドでプログラムを実行している途中で、プログラムにデータを入力することができます。 次のプログラムは、入力された整数をそのまま出力するものです。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class InputTest { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x; /* 8*/ System.out.print("Enter a number: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ System.out.println(x); /* 11*/ } /* 12*/ }
b04a001@AsiaA1:~/comp2b% javac InputTest.java b04a001@AsiaA1:~/comp2b% java InputTest Enter a number: 100 100 b04a001@AsiaA1:~/comp2b%
データ入力のあるプログラムでは、1行目から6行目まではそのまま書くものと考えてください。 ただし、3行目はファイル名によって変わります。
9行目の式
Integer.parseInt(br.readLine())
が入力される数を表します。
プログラムの実行中にこの式がありますと、プログラムはいったん停止します。
「ターミナル」で数を入力してreturnをタイプしますと、入力した数がこの式の値となり、プログラムは続行されます。
注意:
何も入力しないでreturnをタイプしたり、整数(
int
型)でないものを入力した場合、式
Integer.parseInt(br.readLine())
の部分でエラーが発生します。
今までのプログラムは、書いてあることを無条件に順次実行するものばかりでした。 プログラムの構成要素には、このほかに 選択 ( selection ) とよばれるものがあります。 これは、「もし何々が成り立つならば何々する」というような構成要素です。 選択を表す文を、 選択文 ( selective statement ) 、あるいは 条件文 ( conditional statement ) とよびます。
次のプログラムは、入力が負の数ならば"It is a negative number."と出力するものです。
10行目の
x < 0
の部分が、「負の数ならば」という条件を表しています。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class NegativeNumber { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x; /* 8*/ System.out.print("Enter a number: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ if (x < 0) { /* 11*/ System.out.println("It is a negative number."); /* 12*/ } /* 13*/ } /* 14*/ }
b04a001@AsiaA1:~/comp2b% javac NegativeNumber.java b04a001@AsiaA1:~/comp2b% java NegativeNumber Enter a number: 100 b04a001@AsiaA1:~/comp2b% java NegativeNumber Enter a number: -30 It is a negative number. b04a001@AsiaA1:~/comp2b%
「もし何々が成り立つならば何々する」という選択は、
if文
(
if statement
)
を使うと書けます。
if
文は次のような形をとります。
条件
condition
が成り立つならば、
statement1
,
statement2
,
statement3
, ... を実行します。
if (condition) { statement1; statement2; statement3; ... }
if
文の中に、さらに
if
文を書くこともできます。
次のプログラムは、入力が3桁の数ならば"It is a number of three figures."と出力するものです。
10行目で「
x
は100以上」という条件が課され、11行目で「
x
は999以下」という条件が課されますので、12行目は、
x
が100以上999以下の場合、すなわち3桁の数の時に実行されます。
記号
>=
,
<=
はそれぞれ≧, ≦に対応します。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class ThreeFigures { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x; /* 8*/ System.out.print("Enter a number: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ if (x >= 100) { /* 11*/ if (x <= 999) { /* 12*/ System.out.println("It is a number of three figures."); /* 13*/ } /* 14*/ } /* 15*/ } /* 16*/ }
b04a001@AsiaA1:~/comp2b% javac ThreeFigures.java b04a001@AsiaA1:~/comp2b% java ThreeFigures Enter a number: 55 b04a001@AsiaA1:~/comp2b% java ThreeFigures Enter a number: 555 It is a number of three figures. b04a001@AsiaA1:~/comp2b%
上記の例では、条件として
x < 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 になることが、条件が成り立たないことを意味します。
論理演算子を使いますと、より複雑な条件が書けます。
記号
&&
は、ふたつの条件を結んで新しく条件を作ります。
これは、両方の値がtrueになるときtrueという値を持ち、そうでないときfalseという値を持ちます。
記号
||
も、ふたつの条件を結びます。
これは、一方(両方でもよい)の値がtrueになるときtrueという値を持ち、そうでないときfalseという値を持ちます。
記号
!
は、ひとつの条件から新しく条件を作ります。
これは、trueをfalseに、falseをtrueに変えます。
これまでに説明した演算子の優先順位は次のようになります。 分からなくなりそうでしたら、括弧を使って計算順序を明示するのがよいでしょう。
! - (単項) |
* / % |
+ - |
> < >= <= |
== != |
&& |
|| |
ここで、単項の
-
とは、式
- x
などの
-
のことです。
次のプログラムでは、100以上999以下というひとつの条件で3桁の数を判定します。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class ThreeFigures2 { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x; /* 8*/ System.out.print("Enter a number: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ if (100 <= x && x <= 999) { /* 11*/ System.out.println("It is a number of three figures."); /* 12*/ } /* 13*/ } /* 14*/ }
注意:
10行目の条件を
100 <= x <= 999
と書くことはできません。
選択の中には、「もし何々が成り立つならば何々する。成り立たないならば何々する。」というものもあります。 この選択には、 if-else文 ( if-else statement ) を使います。
次のプログラムは、入力が偶数ならば"It is an even number."と出力し、そうでないならば"It is an odd number."と出力するものです。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class EvenOdd { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int x; /* 8*/ System.out.print("Enter a number: "); /* 9*/ x = Integer.parseInt(br.readLine()); /* 10*/ if (x % 2 == 0) { /* 11*/ System.out.println("It is an even number."); /* 12*/ } else { /* 13*/ System.out.println("It is an odd number."); /* 14*/ } /* 15*/ } /* 16*/ }
b04a001@AsiaA1:~/comp2b% javac EvenOdd.java b04a001@AsiaA1:~/comp2b% java EvenOdd Enter a number: 12 It is an even number. b04a001@AsiaA1:~/comp2b% java EvenOdd Enter a number: 15 It is an odd number. b04a001@AsiaA1:~/comp2b%
if
-
else
文は次のような形をとります。
条件
condition
が成り立つならば、
statement1
, ...を実行します。
成り立たないならば、
statement2
, ...を実行します。
if (condition) { statement1; ... } else { statement2; ... }
「何々が成り立つならば何々する。 そうでなくて、何々が成り立つならば何々する。 どちらも成り立たないならば何々する。 」というような選択は、プログラミングでよく用いられます。 これは次のように書きます。
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点以下ならばSを、80点以上90点未満ならばAを、70点以上80点未満ならばBを、60点以上70点未満ならばCを、0点以上60点未満ならばFを、それぞれ出力します。 どの条件も成り立たない場合は、入力が間違っていますので、"An illegal score"と出力します。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class ScoreGrade { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int score; /* 8*/ System.out.print("Enter your score: "); /* 9*/ score = Integer.parseInt(br.readLine()); /* 10*/ if (90 <= score && score <= 100) { /* 11*/ System.out.println("S"); /* 12*/ } else if (80 <= score && score < 90) { /* 13*/ System.out.println("A"); /* 14*/ } else if (70 <= score && score < 80) { /* 15*/ System.out.println("B"); /* 16*/ } else if (60 <= score && score < 70) { /* 17*/ System.out.println("C"); /* 18*/ } else if (0 <= score && score < 60) { /* 19*/ System.out.println("F"); /* 20*/ } else { /* 21*/ System.out.println("An illegal score"); /* 22*/ } /* 23*/ } /* 24*/ }
b04a001@AsiaA1:~/comp2b% javac ScoreGrade.java b04a001@AsiaA1:~/comp2b% java ScoreGrade Enter your score: 100 S b04a001@AsiaA1:~/comp2b% java ScoreGrade Enter your score: 85 A b04a001@AsiaA1:~/comp2b% java ScoreGrade Enter your score: 78 B b04a001@AsiaA1:~/comp2b% java ScoreGrade Enter your score: 50 F b04a001@AsiaA1:~/comp2b% java ScoreGrade Enter your score: -10 An illegal score b04a001@AsiaA1:~/comp2b% java ScoreGrade Enter your score: 120 An illegal score b04a001@AsiaA1:~/comp2b%
選択の使用例として、次の問題を考えます。
あるデパートでは、商品価格が5,000円以上ならば1割引、50,000円以上ならば2割引になるバーゲンセールを行っているとします。 入力された数をもとの価格と見なして、割引後の価格を求めてください。 (入力は負でないと仮定します。)
この問題を解決するには、まず、次の3通りに場合分けをします。
そして、それぞれの場合について、割り引きがあるなら割り引きを計算します。 例えば、1割引なら9倍して10で割ります。 割り引きがないなら何もしません。 プログラムは次の通りです。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class BargainSale { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int price; /* 8*/ System.out.print("Enter its price: "); /* 9*/ price = Integer.parseInt(br.readLine()); /* 10*/ if (price < 5000) { /* 11*/ } else if (5000 <= price && price < 50000) { /* 12*/ price = price * 9 / 10; /* 13*/ } else if (50000 <= price) { /* 14*/ price = price * 8 / 10; /* 15*/ } else { /* 16*/ } /* 17*/ System.out.println(price); /* 18*/ } /* 19*/ }
b04a001@AsiaA1:~/comp2b% javac BargainSale.java b04a001@AsiaA1:~/comp2b% java BargainSale Enter its price: 1000 1000 b04a001@AsiaA1:~/comp2b% java BargainSale Enter its price: 10000 9000 b04a001@AsiaA1:~/comp2b% java BargainSale Enter its price: 100000 80000 b04a001@AsiaA1:~/comp2b%
条件を工夫しますと、このプログラムを短くできます。 つまり、50,000円以上でなければ、必ず50,000円未満なのだから、この条件は確認しなくてもよいのです。 また、金額の大きい順に条件を確認しますと、割り引かない場合をその他の場合にできます。 プログラムは次の通りです。
/* 1*/ import java.io.*; /* 2*/ /* 3*/ class BargainSale { /* 4*/ public static void main (String[] args) throws IOException { /* 5*/ InputStreamReader isr = new InputStreamReader(System.in); /* 6*/ BufferedReader br = new BufferedReader(isr); /* 7*/ int price; /* 8*/ System.out.print("Enter its price: "); /* 9*/ price = Integer.parseInt(br.readLine()); /* 10*/ if (price >= 50000) { /* 11*/ price = price * 8 / 10; /* 12*/ } else if (price >= 5000) { /* 13*/ price = price * 9 / 10; /* 14*/ } else { /* 15*/ } /* 16*/ System.out.println(price); /* 17*/ } /* 18*/ }
次の問題を考えます。
あるバス会社では、バス料金を210円に設定しています。 ただし、12才未満と70才以上の客については、100円に割り引きします。 入力された年齢から、バス料金を求めてください。 (入力は負でないと仮定します。)
この問題を解決するアルゴリズムを考え、プログラムを作成してください。
b04a001@AsiaA1:~/comp2b% javac BusFare.java b04a001@AsiaA1:~/comp2b% java BusFare Enter your age: 20 210 b04a001@AsiaA1:~/comp2b% java BusFare Enter your age: 11 100 b04a001@AsiaA1:~/comp2b% java BusFare Enter your age: 12 210 b04a001@AsiaA1:~/comp2b% java BusFare Enter your age: 69 210 b04a001@AsiaA1:~/comp2b% java BusFare Enter your age: 70 100 b04a001@AsiaA1:~/comp2b%
余力のある人は、条件を工夫して、プログラムを短くしてください。
今日の演習4の答案(Javaプログラム)をメールで提出してください。 メールの送信には学内のコンピュータ(メール・サーバ)を用い、送信先はkonishi@twcu.ac.jpとします。 メールの本文には、学生番号、氏名、科目名、授業日(5月6日)を明記してください。