【Java初心者向け】条件分岐・配列・繰り返し制御文

Java
スポンサーリンク

プログラミングで必ず使用する、
条件分岐・配列・繰り返し制御文 について初心者向けに記載していきます。

条件分岐(if文)

if(論理値1){
    trueもしくはfalse
~論理値1がtrueの場合の処理~
 }
else if(論理値2){
     trueもしくはfalse
~上述した論理値がfalseであり、論理値2がtrueの場合の処理~
 }
else{
     ~上述した論理値が全てfalseであった場合の処理~
 }

ifのブロックは単一必須
elese ifのブロックは複数省略可
elseのブロックは単一省略可
という特徴があります。

条件演算子

書式 論理値 ? 値1 : 値2;
論理値がtrueである場合、値1を返し、論理値がfalseである場合、値2を返します。

ループ文(for文)

同じ処理を繰り返し、実行したい場合に使用します。

for( カウンタ(※宣言も問題なし)の初期化 ;  ループ継続を判定する論理値 ;  カウンタの処理 ){
    ~ループの処理~
}
※forループ文の( )内の処理は処理は省略することが可能です。


サンプル
for( int i = 1 ; i <= 10 ; i++ ){
  System.out.println(“カウンタの値:” + i);    
}

ループ処理の実行順

  1. カウンタの初期化
  2. ループ継続を判定する論理値の判定 (trueの場合…「3」へ、falseの場合…ループブロックを終了)
  3. ~ループの処理~
  4. カウンタの処理
  5. 「2」に戻る

配列

同じ型の値を複数持てる入れ物のことです。

書式
配列を格納する変数の宣言
配列要素の型[] 配列を格納する変数名;

※理解するために、”同じ型の値を複数持てる入れ物”と説明していますが、
本当は配列のアドレス値を格納する変数です。
よく分からないと思うので、とりあえずは入れ物と思ってください。

配列の生成

① new 配列要素の型[要素の数];
『new』とは何かを新しく生成するための演算子です。

例)
int[] array = new int[3];

イメージ図

② new 配列要素の型[]{値};
値はカンマ区切りで複数指定します。

例)
int[] array = new int[]{1,3,5};

イメージ図

配列要素の代入

配列を格納する変数名[添字] = 値;
この添字は負でない整数(0以上の整数)である必要があります。

例) 
array[0] = 1;
array[1] = 3;   
array[2] = 5;

イメージ図

配列要素の参照

配列を格納する変数名[添字]
例)System.out.println(array[2]);
→上記の例のように、値を代入した場合、「5」と出力されます。

配列要素数の参照

配列を格納する変数名.length
例)System.out.println(array.length); 
→ 上記の例のように、値を代入した場合、「3」と出力されます。

配列の注意点
配列の要素数を超えた参照をした場合、実行時エラーとなります。
例) int[] array = new int[3];
array[3] = 7;

エラーの種類

実行時エラーという言葉が出ましたので、エラーについて、
簡単に説明します。

・コンパイルエラー(文法エラー)
・実行時エラー(リリース後のバグとなりえるので危険)
(文法は成立しているが実行した際にエラーとなります)

配列の要素の初期化

配列は生成した時点で各要素に初期値を持ります。

プリミティブ型初期値
byte,short,int,long0
float,double0.0
booleanfalse
char0
オブジェクト型NULL

Javaコマンドの引数

書式
java クラス名 引数
※スペース区切りで複数指定可能です。

例)
java Helloworld abc def
※javaコマンドの引数はmainメソッドの引数である「String配列」の要素として代入されます。

例)
public static void main(String[] args){
}

拡張for文

配列やコレクションフレームワークの要素分ループさせるよう特化したfor文のことです。

書式
for(要素の型 変数名 : 配列もしくはコレクションフレームワーク){
    ~ループ処理~
   }

※ループごとに対象となる配列やコレクションフレームの要素を
「:」の左辺の変数に順次代入します。

文字列と数値型の変換

String型からint型に変換
書式:Integer.parseInt(String型の値);
カッコ内のString型に対応するint型の値を返す処理


例)
String sval = “10”;
// int ival = sval;  →コンパイルエラー(型の不一致)

int ival = Integer.parseInt(sval);  →正常  
int ival = Integer.parseInt(“abc”);     →実行時エラー(変換時)

文字列と数値型の変換

int型からString型に変換
書式:String.valueOf(int型の値);
カッコ内のint型に対応するString型の値を返す処理

例) 
int ival = “10”;
// String sval = ival;   →コンパイルエラー(型の不一致)

String sval = ival + “”;  →正常
String sval = String.valueOf(ival);   →正常

条件分岐 switch~case文

switch( 値 ){
case 値:
  ~switchの値とcaseの値が一致している場合の処理~
  break;  
default:       
  ~上記いずれのcaseにも合致しない場合の処理~
  break;
}

break…自分の所属するブロックを抜ける(switch,ループのみで使用可)

※switchに指定できる値の型は
『byte』 , 『short』 , 『int』 , 『char』 , 『String』 , 『enum』 です。

if文とSwitch文の比較

if文

int val = 10;
if(val % 2 == 0){
  System.out.println(“偶数!!”);
}
else if (val % 2 == 1){
  System.out.println(“奇数!!”);
}

switch文

int val = 10;
switch(val % 2){
case 0:
  System.out.println(“偶数!!”);
  break;
case 1:
  System.out.println (“奇数!!”);
  break;
}

if文、switch文のメリット・デメリット

if文のメリット・デメリット
メリット…等価比較以外も可能(論理値による分岐のため)
デメリット…比較対象の値の記述が冗長になりがち

switch文のメリット・デメリット
メリット…文法の特性から、比較対象の値の記述が一回で済む冗長でない)
デメリット…等価比較しかできない

結論…等価比較の場合switch文(値の型に注意)、それ以外はif文を使うようにします。

switch文のbreak抜かし

int val = □;
① switch(val % 2){
② case 0:
③  System.out.println(“偶”);
④ case 1:
⑤  System.out.println(“奇”);
⑥  break;   }

□の値が偶数の場合、①②③④⑤⑥と実行されるため、「偶」「奇」と出力してしまいます。
1度caseに合致した場合、以降breakが来るまでswitch文内の処理を実行してしまいます。

breakをあえて抜かす場合

char val = ‘B’;
 switch( val ){
 case ‘R’:
  System.out.println(“止まる”);
  break;
 case‘B’:
 case‘Y’:
  System.out.println(“わたる”);
  break;  }

上記の例だと、switchの値が「B」もしくは「Y」という意味になります。

while文

書式
while(論理値){
  ~ループ処理~
}

フロー
① ループ継続判定(論理値がtrue=継続)
② ループ処理
③「①」に戻る

for・whileの使い分け

for文

①カウンタを使用するループ文で使用する。
②配列、コレクションフレームワークの要素数分ループする際に使用する(拡張for文)

while文

カウンタを使用しない、かつ配列、コレクションフレームワークの
要素分ループしない場合に使用します。

breakとcontinue

break:自身が所属するブロックの終了(ループ文、 Switch文)

continue:自身が所属するループ処理の継続判定に戻る

用途
・break …強制的にループを抜けたい場合に使用します。
例)処理上、イレギュラーが発生したときなど

・continue…continue以降のループ処理を実行したくない場合に使用します。
     例)データの読み捨てなど

多次元配列

配列は1次元だけでなく、2次元以上の配列を定義できる

■書式
・2次元配列を格納する変数の宣言 配列要素の型[][] 配列を格納する変数名;

・2次元配列の生成
 ① new 配列要素の型[y方向の要素数][x方向の要素数];
 ② new 配列要素の型[][]{
             { 値 }                    
};

y方向…タテ方向のこと
x方向…ヨコ方向のこと

配列要素の代入
配列を格納する変数名[y方向の添字][x方向の添字] = 値;

配列要素の参照
配列を格納する変数名[y方向の添字][x方向の添字];

例)
String[][] array = new String[][]{  {“1-1”,”1-2”,”1-3”},  {“2-1”,”2-2”,”2-3”} };

イメージ図

配列要素の数

2次元配列では、x方向とy方向それぞれの要素数しか参照できないです。
※全体の要素数を参照する構文はありません。

x軸方向の要素数
配列を格納する変数名[y軸方向の添字].length

y軸方向の要素数   
配列を格納する変数名.length

タイトルとURLをコピーしました