ICT関連の学習備忘録

ICTの学習をアウトプットするワークブックサイト

ICT関連の学習備忘録

2019/09/09:Java基礎(条件に応じた処理)

関係演算子

条件を作る為に使う>記号などは、関係演算子(relational operator)と呼ばれいる。
演算子と条件がtrueとなる場合の例
演算子    式がtrueとなる場合
==  右辺が左辺に等しい
!=  右辺が左辺に等しくない
>   右辺より左辺が大きい
>=  右辺より左辺が大きいか等しい
<   右辺より左辺が小さい
<=  右辺より左辺が小さいか等しい
基本的(?)には左辺を固定値として統一し、
右辺を比較対象とする事が多い(左右逆もある。)

if文

「条件」の値(trueまたはfalse)に応じて処理を行い、
trueの場合には指定した文を処理し、
falseの場合には指定した文を処理しないで次の処理へ移る。
構文
if (条件)
  文;
※基本的には1文の処理でもブロックで括って記述するようにする。下記参照
import java.io.*;

class Sample1
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("整数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		
		int res = Integer.parseInt(str);
		
		if ( res == 1 )     #セミコロン(;)が付かない点に注意。
			System.out.println("1が入力されました。");
		System.out.println("処理を終了します。");
	}
}
出力結果
C:\YJSample\05>java Sample1
整数を入力してください。
1
1が入力されました。
処理を終了します。

C:\YJSample\05>java Sample1
整数を入力してください。
6
処理を終了します。

if文で複数の文を処理する(ブロック)

複数の文を処理するif文は{}でブロックをつくり、複数の文をまとめることが出来る。
また、中括弧{}の最後には;は不要。
構文
if(条件){
  文1;
  文2;
  ・・・
}
import java.io.*;

class Sample2
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("整数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		
		int res = Integer.parseInt(str);
		
		if ( res == 1 ){
			System.out.println("1が入力されました。");
			System.out.println("1が選択されました。");
		}
		System.out.println("処理を終了します。");
	}
}

if~else文

直前のif文の条件がfalseの場合に、
指示したelseブロック内の文を実行する仕組み
構文
if(条件){
  文1;
}
else{
  文2;
}
import java.io.*;

class Sample3
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("整数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		
		int res = Integer.parseInt(str);
		
		if ( res == 1 ){
			System.out.println("1が入力されました。");
		}
		else{
			System.out.println("1以外が入力されました。");
		}
	}
}

論理演算子

論理演算子(logical operator)は複数の条件を組み合わせた上で、
trueまたはfalseの値を得ることが出来る。

種類
論理和(又は ※どちらかがtrueの場合true)
OR
||
論理積(かつ ※どちらもtrueの場合のみtrue)
AND
&&
論理否定(否定 ※条件の結果を反転させる)
NOT
!
※論理演算子の優先順位は、関係演算子より低い。
(略)]
if (score >= 80){
	System.out.println("海外旅行に行く");
}
if (score >=60 && score < 80 ){
	System.out.println("国内旅行に行く");
}
if (score <60){
	System.out.println("もう一度勉強する");
}
(略)

if~else if~else文(複数の条件)

二つ以上の条件を一つのif文で処理するバリエーションを複数作る
構文
if(条件1){
 処理1;
 処理2;
}
else if(条件2){
 処理3;
 処理4;
}
else if(条件3){
 処理5;
}
…(略)
import java .io.*;

class Sample4
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("整数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		int res = Integer.parseInt(br.readLine());
		
		if (res == 1){
			System.out.println("1が入力されました。");
		}
		else if (res == 2){		#最初のifでfalseの条件かつ res==2のものを処理
			System.out.println("2が入力されました。");
		}
		else{
			System.out.println("1か2を入力してください。");
		}
				
	}
}

switch文

式の値がケースの値に一致(true)の場合に、
ケース内の文を実行する
構文
switch(式){
 case 値1:
  文1;
  ・・・
  break;
 case 値2:
  文2;
  ・・・
  break;
 default:
  文D;
  ・・・
  break;
}
※break;を抜くとbreak;迄上から全てを実行する為
 基本的にはケース毎にbreak;を記述する。
 なお、あえて抜くフォールスルー(fall through)という技法も存在する。
import java .io.*;

class Sample5
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("整数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		int res = Integer.parseInt(br.readLine());
		
		switch (res){
		case 1:
			System.out.println("1が入力されました。");
			break;		
		case 2:
			System.out.println("2が入力されました。");
			break;
		default:
			System.out.println("1か2を入力してください。");
			break;
		}
	}
}

クラス型変数の特殊な動き

クラス型変数は、文字列そのものを記憶しているわけではなく、
データの格納場所を記憶しているに過ぎない為、
同じ値を比較しているつもりでも格納場所が異なる為falseと判定される。
import java .io.*;

class Sample6
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("整数を入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		String str1 = br.readLine();
		String str2 = br.readLine();
		String str3 = "Hello";
		System.out.println("str1は"+str1);
		System.out.println("str2は"+str2);
		System.out.println("str3は"+str3);
		System.out.println("str1とstr2を==演算子で比較すると"+(str1==str2));
		System.out.println("str1とstr3を==演算子で比較すると"+(str1==str3));
	}
}
実行結果
C:\YJSample\05>java Sample6
整数を入力してください。
Hello	#str1へ標準入力で代入
Hello	#str2へ標準入力で代入
str1はHello
str2はHello
str3はHello
str1とstr2を==演算子で比較するとfalse
str1とstr3を==演算子で比較するとfalse

入力文字によっての場合わけ

入力した「文字」(1字)によって場合分けする場合は、
下記のように、メソッドを使用して比較を行う。
※文字列での比較を行う場合のメソッドは追々。
import java .io.*;

class Sample6
{
	public static void main(String[] args) throws IOException
	{
		System.out.println("aかbを入力してください。");
		
		BufferedReader br =
		new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		char res = str.charAt(0); #入力した文字列の一文字目を取り出す。
		
		switch(res){
		case 'a':
			System.out.println("aが入力されました。");
			break;
		case 'b':
			System.out.println("bが入力されました。");
			break;
		default:
			System.out.println("aかbを入力してください。");
			break;
		}
	}
出力結果
C:\YJSample\05>java Sample6
aかbを入力してください。
a
aが入力されました。

C:\YJSample\05>java Sample6
aかbを入力してください。
b
bが入力されました。

C:\YJSample\05>java Sample6
aかbを入力してください。
c
aかbを入力してください。

条件演算子(?:)

簡単な分岐(1行のif文程度)であれば、if文を使わなくても
条件演算子(conditional operator)を使用すると1行で記述が出来る。
char ans;
if(res == 1){
	ans = 'A';
}else{
	ans = 'B';
}

↓↓↓

char ans = (res == 1) ? 'A':'B';
#手前側がtrueの場合の処理、右側がfalesの場合の処理



前のページへ戻る