【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,long 0
float,double 0.0
boolean false
char 0
オブジェクト型 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をコピーしました