2019.08.04
値の比較
値を比較するとは
値の比較は、与えられた2つの値aとbを比較し、aとbが同じであるか、aがbよりも大きいか、aがbよりも小さいかを判定するものです。
値を比較する演算子
意味 | 演算子 | 使用例 | 使用例の結果 |
---|---|---|---|
より大きい | >(半角) | ( a > b ) | aがbより大きければ→true 以下であれば→false |
以上 | >=(半角) | ( a >= b ) | aがb以上であれば→true 小さければ→false |
より小さい | <(半角) | ( a < b ) | aがbより小さければ→true 以上であれば→false |
以下 | <=(半角) | ( a <= b ) | aがb以下であれば→true 大きければ→false |
等しい | ==(半角) | ( a == b ) | aとbが等しければ→true 等しくなければ→false |
等しくない | !=(半角) | ( a != b ) | aとbが等しくなければ→true 等しければ→false |
比較演算子の使い方
変数の代入に使う
boolean a = 条件式
if文で条件式を使う
if ( 条件式 ) { 処理文1 処理文2 : }
if ( 条件式 ) 処理文
for文で条件式を使う
for ( 初期化式; 継続条件式; 変化式 ) { 処理文1; 処理文2; : }
while文で条件式を使う
while ( 継続条件式 ) {
処理文1
処理文2
:
}
do~while文で条件式を使う
do {
処理文1
処理文2
:
while ( 継続条件式 );
CompareValue1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018
public class CompareValue1 { public static void main( String[] args ) { int a, b; // aとbの比較 a = 10; b = 14; if ( a == b ) System.out.println( a + "と" + b + "は等しい" ); else { if ( a > b ) System.out.println( a + "は" + b + "より大きい" ); else System.out.println( a + "は" + b + "より小さい" ); } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis CompareValue1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac CompareValue1.java
実行
C:\talavax\javasample>java CompareValue1
10は14より小さい
正しい比較結果が出力されています。
CompareValue2.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018
public class CompareValue2 { public static void main( String[] args ) { float a, b; // aとbの比較 a = 25.0f / 0.3f; b = 250.0f / 3.0f; if ( a == b ) System.out.println( a + "と" + b + "は等しい" ); else { if ( a > b ) System.out.println( a + "は" + b + "より大きい" ); else System.out.println( a + "は" + b + "より小さい" ); } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis CompareValue2.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac CompareValue2.java
実行
C:\talavax\javasample>java CompareValue2
実行結果
83.33333は83.333336より小さい
2つの変数に同じ計算結果が代入されるようにしていますが、計算誤差により2つの計算結果が等しいと判定されていません。
3つ目のソースコードは、float型の変数の値を比較するものです。2つ目のソースコードとの違いはfloat型の計算誤差を考慮していることです。float型のepsにゼロに近い値を代入し、2つ値の差の絶対値がeps未満であれば等しいと判定するようにしています。
CompareValue3.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020
public class CompareValue3 { public static void main( String[] args ) { float a, b; float eps = 0.0001f; // 0に近い値 // aとbの比較 a = 25.0f / 0.3f; b = 250.0f / 3.0f; // 同じ値か比較(aとbの差が0に近いか) if ( eps > Math.abs( a - b ) ) System.out.println( a + "と" + b + "は等しい" ); else { if ( a > b ) System.out.println( a + "は" + b + "より大きい" ); else System.out.println( a + "は" + b + "より小さい" ); } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis CompareValue3.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac CompareValue3.java
実行
C:\talavax\javasample>java CompareValue3
実行結果
83.33333と83.333336は等しい
2つの値が同じと判定されています。
以上です。