プログラミング基礎I(再)

山元進
条件演算子
 if ( … ) { … } else { … }
 switch ( … ) { case … }


( … ) には条件を記述する式が入る
条件 とは 真/偽 が判定できるようなもの
 条件の記述

日常会話では 「英語の試験は良い成績だった」と
いうような、あいまいな条件がありうる
 コンピュータはあいまいな判定条件をどうにか処
理できるほど気が利かないので、確定的な条件を
与える。 英語の点数を表す変数を a として

a >= 80
 a < 80


コンパイル時に判定できるような条件
3 > 1 いつでも真な条件式
 3 < 1 いつでも偽な条件式


他にも真/偽を判定するような演算子 (関係
演算子) が色々ある cf. 表5-1



5>3
3>5
a == 6





a の値が 6 のときは true
a の値が 6 ではない時は false
a != 6

評価すると true (真)
評価すると false(偽)
変数 a の値によって評価変わる
上の例と反対の関係
a の値が 6 のときは false
a の値が 6 ではない時は true
== と = (代入演算子) を混同するな


まず、もっとも簡単な構文から
if ( 条件 )
{
条件成立時の処理 …
}
注意: 条件成立時の処理が 1 文のときは {} で
括る必要がない。しかし、ついていても構わない
ので、いつでも {} をつけておいた方が良い
import java.io.*;
class Sample1
{
public static void main(String[] args)
throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
if (res == 1) {// 必ず {} でくくることを推奨
System.out.println("1が入力されました。");
}
// 1 が入力されたとき上の行が実行される
System.out.println("処理を終了します。");
}
}
import java.io.*; // 条件成立時に、複数の処理を行う
class Sample2
{
public static void main(String[] args)
throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
if (res == 1) {// 入力が 1 のとき、以下の複数の処理をする
System.out.println("1が入力されました。");
System.out.println("1が選択されました。");
}
System.out.println("処理を終了します。");
}
}
import java.io.*; // 条件成立時に、複数の処理を行う
class Sample2
{
public static void main(String[] args)
throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
if (res == 1) // {} を外しても文法上は正しい。
System.out.println("1が入力されました。");
System.out.println("1が選択されました。");
// 入力が 1 でなくても"1が選択されました。"と出力される → バグ
System.out.println("処理を終了します。");
}
} // バグとは、プログラムの誤りのこと。
if(res == 1)
System.out.println("1が入力されました。");
System.out.println("1が選択されました。");
字下げ(インデンテーション)が正しくないので、
プログラムのバグが見つけにくい
if(res == 1)
System.out.println("1が入力されました。");
System.out.println("1が選択されました。");
条件成立時に実行される文だけ字下げすべき
import java.io.*; //条件不成立のときの処理を指定する
class Sample3
{
public static void main(String[] args)
throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
if (res == 1) {
System.out.println("1が入力されました。");
} else {
System.out.println("1以外が入力されました。 ");
}
}
}
import java.io.*; // 条件の判断を複数行う
class Sample4
{
public static void main(String[] args)
throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
if (res == 1) {
System.out.println("1が入力されました。");
} else if (res == 2) {
System.out.println("2が入力されました。 ");
} else {
System.out.println("1か2を入力してください。");
}
}
}
import java.io.*; // 条件の判断を複数行う switch 文
class Sample5
{
public static void main(String[] args) throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
switch (res) {
case 1:
System.out.println("1が入力されました。");
break; // この break; がないと、次の処理が継続して行われる
case 2:
System.out.println("2が入力されました。 ");
break; // break; は switch 文を抜ける、という意味
default: // 今までの case に当てはまらない場合
System.out.println("1か2を入力してください。");
break; // この break は必要ない。 入れると style が統一されて良い。
}
}
}
import java.io.*; // 入力文字によって場合分けする
class Sample6
{
public static void main(String[] args) throws IOException
{
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
char res = str.charAt(0); // 先頭の char を取り出すメソッド
switch (res) { // () 内の式の値として String 型は許されない。
case 'a': // switch ( … ) の()内の値に対応して char 型のリテラル
System.out.println("aが入力されました。");
break;
case 'b':
System.out.println("bが入力されました。 ");
break;
default:
System.out.println("aかbを入力してください。");
break; // 最後なので、この break はなくても同じ動作をする。
}
}
}

A && B




A || B




数学でいうところの A または B に対応する
A か B のどちらかが true のとき true
どちらも false の場合 false
!A




数学でいうところの A かつ B に対応する
A, B がともに true のとき true
それ以外の場合 false
数学でいうところの A の否定に対応する。単項演算子
A が false のとき true
A が true のとき false
論理演算子により複雑な条件を表現可能

時間があり、かつ、金があれば …
import java.io.*;
class Sample7
{
public static void main(String[] args) throws IOException
{
System.out.println("あなたは男性ですか?");
System.out.println("YまたはNを入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
char res = str.charAt(0);
if(res == 'Y' || res == 'y') {
System.out.println("あなたは男性ですね。");
} else if(res == 'N' || res == 'n') {
System.out.println("あなたは女性ですね。");
} else {
System.out.println("YまたはNを入力してください。");
}
}
}

3項演算子(オペランドが3つ)
A?B:C
 条件式 A が true なら B, false なら C が値となる
 例 (res == 1) ? 'A' : 'B'
res の値が 1 なら char
型の 'A' が値となる。それ以外の場合 'B' が値。

import java.io.*;
class Sample9
{
public static void main(String[] args) throws
IOException
{
System.out.println("何番目のコースにしますか?");
System.out.println("整数を入力してください。");
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
String str = br.readLine();
int res = Integer.parseInt(str);
char ans = (res==1) ? 'A' : 'B' ;
System.out.println(ans +
"コースを選択しました。");
}
}
char ans = (res==1) ? 'A' : 'B' ;
の部分は
char ans;
if(res==1){
ans = 'A';
} else {
ans = 'B';
}
とおなじこと。
条件演算子だと、6 行が 1 行で書けて便利。
(テキストの Sample8.java だと、 {} を省いてあるの
で 5 行になっている。)






関係演算子を使って条件を作成できる
if文を使って条件に応じた処理を行うことができる
if文のバリエーションを使って,いろいろな条件に応
じた処理を行うことができる
switch文を使って式の値に応じた処理を行うことが
できる
論理演算子を使って複雑な条件を作成できる
条件演算子?:を使って条件に応じた処理を簡単に
記述できる
1.
整数を入力し、それが10未満であれば「入力された数は
10未満の整数です。」と出力するプログラムを作成せよ。
2.
整数を入力し、それが10未満であれば「入力された数は
10未満の整数です。」と、10以上であれば「入力された数
は10以上の整数です。」と出力するプログラムを作成せよ。
3.
整数を入力し、それが0~9の範囲であれば「入力された
数は1ケタの整数です。」と、10~99の範囲であれば「入
力された数は2ケタの整数です。」と、100以上であれば
「入力された数は3ケタ以上の整数です。」と出力するプロ
グラムを、if 文とelse文を組み合わせて作成せよ。ただし、
入力された整数が負の場合は、それ以上なにも出力せず
に終了することとする。
4.
5.
整数を入力し、それが0~9の範囲であれば「入力された
数は0以上9以下の整数です。」と、10~19の範囲であれ
ば「入力された数は10以上19以下の整数です。」と、20
以上であれば「入力された数は20以上の整数です。」と
出力するプログラムをswitch文を用いて作成せよ。3.同
様、入力された整数が負ならば、それ以上なにも出力し
ないで終了することとする。
→ 提出するのはReport4.javaのみ
a=13の時,次の条件がtrueであるかfalseであるか答えよ。
(TAのチェックを受けること)
1.
2.
3.
a>10 && a%2==1
a<10 || a%2==0
!(a==13)