3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

初心者から始めるJava、if文・switch文

Posted at

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
間違えたものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#条件判断文
状況に応じた処理を行う場合、Javaでは**「条件(Condition)」という考え方で処理の前提をとらえることになる。日常生活で使う条件と同じと考えていいが、Javaにおける「条件」は、TrueかFalseどちらかの値を持つものを指す。
条件判断文は、
「条件」の値に応じて処理を行う文**であり、条件の値を境に処理の内容を分けて用意することができる機能である。

  • if文
  • もし~であるならば(でないのなら)、〇〇する。 そうでないならば(else)、△△する。
  • switch文
  • もし、〇〇の値が●●ならば、◎◎する。 △△の値が▲▲ならば、▼▼する。 いずれでもないのなら(default)、□□する。

#関係演算子
関係演算子のうち、等号と不等号の話は前回した。残りの関係演算子は数学で扱ったものとほぼ変わらない。

  • ==
  • 左辺右辺が等しい
  • !=
  • 左辺右辺が異なる
  • >
  • 左辺のほうが右辺よりも大きい
  • >=
  • 左辺のほうが右辺以上に大きい
  • <
  • 右辺のほうが左辺よりも大きい
  • <=
  • 右辺のほうが左辺以上に大きい

#if文
基本構造はこう。

if(条件){
  内容;
  内容;
  ...
}
else{
  内容;
  内容;
  ...
}

**;(セミコロン)の位置にはくれぐれも注意。**ifやelseの直後に付かないし、内容の後には必ず付ける。また、特段の事情がない限りは、{}でifとelseそれぞれの内容を囲っておくこと。

以下間違い。

WrongEnclosing.java
...
int eggsInPoundCake = 2;
int theseEggsWeUse = 8;

if(theseEggsWeUse != eggsInPoundCake)
  System.out.println("パウンドケーキに必要な卵の数は2個です。");
  System.out.println("パウンドケーキのために卵を" + eggsInPoundCake +"個貰いますね。");
  theseEggsWeUse= theseEggsWeUse - eggsInPoundCake;
else
  System.out.println("卵をすべて使い切ってしまいました。");

 //2か所も間違っている。でもコンパイルできない理由はひとつだ。

{}で囲っていないため、if文は

 System.out.println("パウンドケーキに必要な卵の数は2個です。");
の段までしか掛かっていない。下のelse文が接続していない扱いとしてコンパイルエラーが出る。
もしelseがない場合、

 System.out.println("パウンドケーキのために卵を" + eggsInPoundCake +"個貰いますね。");
theseEggsWeUse= theseEggsWeUse - eggsInPoundCake;

この2行はif文の外として扱われ、条件分けした(と思い込んでいる)にも関わらず勝手に処理される。

else if については今回は割愛。
#switch文
基本構造はこう。

switch(式){
  case 値:
   内容;
   ...
   break;
  case 値:
   内容;
   ...
   break;
  default:
   内容;
   ...
   break;
}

breakとは、**ブロック内の処理を強制的に終わらせてブロック外に抜ける文である。**switch文では、(defaultがあれば)defaultの内容まで該当する処理の中身すべてを表示してしまうため、処理の流れを操作したい場合にbreakが使われる。
以下間違え。

noBreak.java
...
int creditInSchool = 0;
char judge = 'A';
... //学校の単位に必要な各条件の検討
    //judgeが単位

//仮に彼はAの単位のままだったとする
switch(judge){
  case 'A':
    System.out.println("彼の単位は" + judge + "だ。");
  case 'B':
    System.out.println("彼の単位は" + judge + "だ。");
  case 'C':
    System.out.println("彼の単位は" + judge + "だ。");
  case 'D':
    System.out.println("彼の単位は" + judge + "だ。");
  default :
    System.out.println("彼の単位は" + judge + "、この単位は上げられないよ");
}

//結果
//彼の単位はAだ。
//彼の単位はAだ。
//彼の単位はAだ。
//彼の単位はAだ。
//彼の単位はA、この単位は上げられないよ

breakを入れないと、すべてのケースが実行されてしまう。

#終わりに
条件文は、実例かあるいは設問を数解くことが上達への道だろう。else ifが山積みの問題は難しいし、何より実践でごちゃごちゃにするとスパゲッティコード間違いなし。

#参考
出来るだけ自分で変数や式を書いてコンパイルしているので、完全に引用する場合はその旨記述する。

やさしいJava 第7版

3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?