分岐処理

目標

次の動きをするプログラムを作成できる

画面

いつ使うのか

ゲームとかでボタンを押すとキャラクターが動きますね.ボタンが押されたときと押されていないときで処理が違います.「もし〜ならこの処理をする」というのが欲しいですね.それがこれから紹介するif文です.

もし〜だったら

「もしAだったらBをする」をプログラムにすると次のコードになります.

if(A){
    B
}

Bには命令が入り,Aには条件式が入ります.

条件式日本語
a==baとbが等しい
a>baがbより大きい
a>=baがb以上
a<baがbより小さい
a<=baがb以下

aとbが等しい時の条件式が=ではなく==であることに注意です.

次のプログラムでaの値を変えたり条件式を変えたりして動作を確認しましょう.

int a=100;

if(a==100){ // もし、aが100なら
  println("aは100です");
}

if(a>100){// aが100より大きいなら
  println("aは100より大きいです");
}

また,条件を連ねたいときは&&を使います."かつ"と読み替えることができます.次のプログラムはaが100以上,かつaが200未満,という条件になります.

int a=100;

if( 100<=a && a<200 ){ // aが100以上200未満なら
  println("aは100以上200未満です");
}

"かつ"(&&)に対して,||1は"または"を表す記号です. 次のプログラムはageが7である,またはageが5である,またはageが3であるときに"七五三"を表示するプログラムです.

1

見慣れない記号かもしれません,パイプラインと呼びます.キーボードの右上の方にあります.

int age=10000;

if(age==7 || age==5 || age==3){
    println("七五三");
}

練習

演習5-1

int score=任意の整数;に対して,scoreが60未満の場合に「留年」と表示するプログラムを作成しなさい.

演習5-2

演習5-1に加えて,scoreが101以上の場合も"留年"と表示するプログラムを作成しなさい.

解答例

解答例:コードを書いてから答えをみよう!
演習5-2:
if(score<60){
    println("留年");
}

演習5-3:

if(score<60||score>100){
    println("留年");
}

else,else if

else(日本語: 他の)は文字通りそうでないときの処理を書きます. 次のif文では,score<60の条件を満たさなかった場合,elseの方が実行されます.

int score=74;
if(score<60){
    println("不可");
}else{
    println("合格");
}

次の2つのプログラムと実行結果を比較してみましょう

int score=54;
if(score<60){
    println("不可");
    println("課題を提出してもらったので点数を60点にしてあげます");
    score=60;
}else{
    println("合格");
}
int score=54;
if(score<60){
    println("不可");
    println("課題を提出してもらったので点数を60点にしてあげます");
    score=60;
}
if(score>=60){
    println("合格");
}

実際に使う

前回のチャプターで作った顔が動くプログラムで,xが無限に増え続けるので画面外にいってしまいます.そこでif文を使うと,右端にいったら左端から出てくるようにすることができます.

int x=300;
int y=300;

void setup(){
    size(600,600);
}

void draw(){
    fill(255,255,255);
    rect(0,0,600,600);//画面を真っ白に

    ellipse(x,y,200,200);
    fill(0,0,0);
    ellipse(x-50,y-20,50,50);
    ellipse(x+50,y-20,50,50);
    line(x-50,y+50,x+50,y+50);//顔を描く

    x=x+3;
    if(x>700){//もしxが700を超えたら
        x=-100;//xを-100に設定する
    }
}

y座標についても同じことをしてやると,古いDVDプレイヤーにスクリーンセーバーにありそうなちょっと面白い動きになります.

int x=300;
int y=300;
int vx=9,vy=6;

void setup(){
    size(600,600);
}

void draw(){
    fill(255,255,255);
    rect(0,0,600,600);//画面を真っ白に

    ellipse(x,y,200,200);
    fill(0,0,0);
    ellipse(x-50,y-20,50,50);
    ellipse(x+50,y-20,50,50);
    line(x-50,y+50,x+50,y+50);//顔を描く

    x=x+vx;
    y=y+vy;
    if(x>700){//もしxが700を超えたら
        x=-100;//xを-100に設定する
    }
    if(y>700){//もしyが700を超えたら
        y=-100;//yを-100に設定する
    }
}