柴田望洋先生の本ですが、「明解Java入門編」の演習に、こんなのがありました。3個の整数を入力。
それを小さい順に出力する。3個の数字を比較するだけの問題ですが、理論的でない自分は少し
難しかったです。最初はif文を単純に組み合わせると、これが分かりづらい。
import java.util.Scanner;
public class Ensyu3_16 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Scanner stdIn = new Scanner(System.in);
System.out.println("最初の整数を入力");
int a = stdIn.nextInt();
System.out.println("次の整数を入力");
int b = stdIn.nextInt();
System.out.println("最後の整数を入力");
int c = stdIn.nextInt();
if ( a < b){
if ( b < c){
System.out.println(" "+a+" "+b+" "+c);
}
else {if ( a < c ){
System.out.println(" "+a+" "+c+" "+b);
}
else {
System.out.println(" "+c+" "+a+" "+b);
}
}
}
else if ( a < c){
System.out.println(" "+b+" "+a+" " +c);
}
else if (b < c){
System.out.println(" "+b+ " "+c+" "+a);
}
else {
System.out.println(" "+c+" " +b+" " +a);
}
}
}
上のプログラムをよく見てみると、早い話が6通りの場合がある。それを出力するだけ。
import java.util.Scanner;
public class Ensyu3_16 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Scanner stdIn = new Scanner(System.in);
System.out.println("最初の整数を入力");
int a = stdIn.nextInt();
System.out.println("次の整数を入力");
int b = stdIn.nextInt();
System.out.println("最後の整数を入力");
int c = stdIn.nextInt();
if (a < b && b < c) System.out.println(" "+a+" "+b+" "+c);
if (a < c && c < b) System.out.println(" "+a+" "+c+" "+b);
if (c < a && a < b) System.out.println(" "+c+" "+a+" "+b);
if (b < a && a < c) System.out.println(" "+b+" "+a+" "+c);
if (c < b && b < a) System.out.println(" "+c+" "+b+" "+a);
if (b < c && c < a) System.out.println(" "+b+" "+c+" "+a);
}
}
となりそうです。結果は上も下も同じようです。自分は下のほうがすっきりと思いました。でも
上で書いてから、下が出てきたんですが。
この場合は、3個の数値が違うものが入力されている場合は、良いのですが、同じ数値が
2個以上あると表示しません。条件に=を加えないといけないようです。