たまには前置きをせずに復習を始めてみよう。
お品書き
- 構造化プログラミング
- if文
- else if文
- switch文
- if文とseitch文の使い分け
◆構造化プログラミング
下記の構造を組み合わせてプログラムを書くこと。
プログラムがわかりやすくなる。
①順次進行
処理を上から順々に実行していく構造
②分岐
ある条件を通って満たされるならtrue
満たされないならfalseを
という処理をわける構造
③繰り返し
ある条件が満たされている間は同じ処理を繰り返す構造
◆if文
if( 条件式 ){
処理1
}else{
処理2
}
・どちらかの処理しか実行されない
・else以降は省略可
※省略した場合、条件を満たさないときは何もしない
・処理が1つのときは{ }
を省略可
※省略できるがプログラムがわかりにくくなるため非推奨
◆if文Sample
class Aaa{
public static void main(String[] args){
int price = Integer.parseInt(args[0]);
double rate = 0.10; // 消費税率:10%;
int discount, amount;
if( price >= 3000 ){ // 値引額の設定 3000円以上か以未満か見る
discount = 300; //3000円以上なら300円割引しますよ
} else {
discount = 0; //3000円未満なら割引なし
}
amount = (int)((price - discount) * (1 + rate)); //if文で見た金額を計算して消費税率を計算。前回出てきた型変換
System.out.println("値引金額:" + discount + "円");
System.out.println("税込金額:" + amount + "円");
}
}
例えば購入価格が5000円だったら。
C:\Java\1>java Aaa 5000
値引金額:300円
税込金額:5170円
値引きされないパターン
C:\Java\1>java Aaa 2999
値引金額:0円
税込金額:3298円
◆else if文
if( 条件式1 ){
処理1
}else if(条件式2){
処理2
}else{
処理3
}
・条件は上から順に判定
◆elase if文Sample
さっきのSampleにelse if文を追加
class Aaa{
public static void main(String[] args){
int price = Integer.parseInt(args[0]);
double rate = 0.10; // 消費税率:10%;
int discount, amount;
if( price >= 5000 ){ // 購入金額が5000円以上か未満か
discount = 500; //以上なら割引
} else if ( price >= 3000 ){ //3000円以上か未満か
discount = 300; //以上なら割引
} else {
discount = 0; //3000未満だったら割引なし
}
amount = (int)((price - discount) * (1 + rate));
System.out.println("値引金額:" + discount + "円");
System.out.println("税込金額:" + amount + "円");
}
}
C:\Java\1>java Aaa 5000
値引金額:500円
税込金額:4950円
C:\Java\1>java Aaa 4999
値引金額:300円
税込金額:5168円
C:\Java\1>java Aaa 3000
値引金額:300円
税込金額:2970円
C:\Java\1>java Aaa 2999
値引金額:0円
税込金額:3298円
5000円購入すれば500円引き、3000円から4999円までなら300円引き。
3000円未満は値引きなしという結果。
条件式の結果ってboolean型
ですね。
◆switch文
一度に処理を多分岐に分けられる。
switch(式){
case 値1 ;
処理1
break ;
case 値2 ;
処理2
break ;
defaut ;
処理3
}
式はbyte型、short型、int型、char型等。
式の値によって処理の開始位置が決まる。
例えば、式の値が値1と同じならcase1から処理をスタート。値2と同じならcase2からスタート。
breskは{ 処理 }
を抜ける。
◆switch文Sample
class Aaa{
public static void main(String[] args){
int num = Integer.parseInt(args[0]);
switch( num ){
case 1:
System.out.println("入園料金:8,400円");
break; //入力された値が1なら抜ける
case 2:
System.out.println("入園料金:7,000円");
break; //入力された値が2なら抜ける
case 3:
System.out.println("入園料金:5,000円");
break; //入力された値が3なら抜ける
default: //それ以外
System.out.println("1:一般,2:中・高校生,3:小学生・幼児");
}
}
}
class Branch3{
public static void main(String[] args){
int num = Integer.parseInt(args[0]);
switch( num ){
case 1:
System.out.println("入園料金:8,400円");
break;
case 2:
System.out.println("入園料金:7,000円");
break;
case 3:
System.out.println("入園料金:5,000円");
break;
default:
System.out.println("1:一般,2:中・高校生,3:小学生・幼児");
}
}
}
break処理をしないとどうなる?
class Aaa{
public static void main(String[] args){
int num = Integer.parseInt(args[0]);
switch( num ){
case 1:
System.out.println("入園料金:8,400円");
// break;
case 2:
System.out.println("入園料金:7,000円");
// break;
case 3:
System.out.println("入園料金:5,000円");
break;
default:
System.out.println("1:一般,2:中・高校生,3:小学生・幼児");
}
}
}
breakで抜けないため、入力された値の位置から順に処理をしていく。
C:\Java\1>java Aaa 1
入園料金:8,400円
入園料金:7,000円
入園料金:5,000円
C:\Java\1>java Aaa 2
入園料金:7,000円
入園料金:5,000円
◆if文とswitch文の使い分け
基本的にはif文を使うと思う。
switch文で出来る処理はif文でもできる。
がしかし、
if文はtureかfalse
で見て上から処理する二分岐なので、swich文と同じ処理をしようもんなら条件の数だけelse if
を記述していくため、コードの複雑化、処理速度が遅くなったりする。
switch文Sampleのように変数の値によって処理を一度に多分岐したいときはswitch文の方がわかりやすい。
どんな処理のしたいかを考え、適切な方をえらびましょ。