//整体代码部分(Demo01类中编写)

import java.util.Scanner;

public class Demo01 {
    //java语句-判断数值大小(求最值)
    public static void main(String[] args) {
        //要求:键盘录入三个数(a、b、c),求出其最大值并输出
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入第一个数a:");
        int a = sc.nextInt();
        System.out.print("请输入第二个数b:");
        int b = sc.nextInt();
        System.out.print("请输入第三个数c:");
        int c = sc.nextInt();
        int temp;//引入中间变量用于数值交换
        //方法一(可以改变变量a、b、c中储存的数值,利用if语句默认将最大的数值存储在变量a当中并输出):
        //(1)利用if语句使得a>=b
        if (a < b) {
            temp = a;
            a = b;
            b = temp;
        }
        //(2)利用if语句使得a>=c
        if (a < c) {
            temp = a;
            a = c;
            c = temp;
        }
        //(3)此时a>=b并且a>=c,故a为最大值,输出最大值a
        System.out.println("最大值为:" + a);
        //注:方法一中可以默认将最大的数值储存在任何一个变量中,都是相同的方法


        //方法二(不改变变量a、b、c中存储的数值,利用if语句比较出最大值并输出):
        //(1)首先比较a和b的大小
        if (a > b) {
            //(2)a>b已知,只要再将较大的a与c比较,便可获得最大值
            if (a > c) {
                //(3)a>b且a>c,故a为最大值
                System.out.println("最大值为:" + a);
            } else {
                //(3)a>b且a<=c,故c为最大值
                System.out.println("最大值为:" + c);
            }

        } else {
            //(2)a<=b已知,只要再将较大的b与c比较,便可获得最大值
            if (b > c) {
                //(3)a<=b且b>c,故b为最大值
                System.out.println("最大值为:" + b);
            } else {
                //(3)a<=b且b<=c,故c为最大值
                System.out.println("最大值为:" + c);
            }

        }

        //方法三(利用三元运算符比较数值大小):
        //(1)先求前两个数的最大值mxa1
        int max1 = a > b ? a : b;
        //(2)再将max1与c作比较,求出最大值max
        int max = max1 > c ? max1 : c;
        //可将前两步进行嵌套,直接得出最大值max=(a > b ? a : b) > c ? (a > b ? a : b) : c;
        //(3)输出最大值max
        System.out.println("最大值为:"+max);

        //前两种方法都利用了if语句进行判断,第一种方法可以改变变量中储存的数值,默认将最大值储存在一个变量当中并输出;
        //第二种方法则不改变变量中存储的数值,利用if语句逐个比较,求出最大的数值并输出,整体比较逻辑思维较为复杂。
        //以上是判断数值大小(求最值)常用的三种方法,适用于比较数值较少的情况。
        //如果用于比较的数值太多,则可将数值储存到定义好的数组中,利用数组遍历求最值会更为简便。

        //补充:
        //方法四(定义一个第三方变量,如:m,用来记录比较过程中的较大值及最大值)
        //(1)定义一个变量m,并让其默认储存a当中的数值
        int m = a;
        //(2)利用if语句比较m和b中所储存数值的大小,并确保m中储存的为较大值
        if (b > m) m = b;//注:如果if语句中的语句体只有一句,则可以省略{}
        //(3)利用if语句比较m和c中所储存数值的大小,并确保此时m中储存的为最大值
        if (c > m) m = c;
        //(4)输出最大值m
        System.out.println("最大值为:" + m);

    }
}
//整体代码部分(Demo02类中编写)
package Demo;

import java.util.Scanner;

public class Demo02 {
    //if语句-判断数值大小并排序
    public static void main(String[] args) {
        //键盘录入三个数值,比较大小后,按照由小到大的顺序打印在控制台上
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入第一个整数:");
        int a = sc.nextInt();
        System.out.println("请输入第二个整数:");
        int b = sc.nextInt();
        System.out.println("请输入第三个整数:");
        int c = sc.nextInt();
        int temp;//引入中间变量用于两个变量之间数值的交换
        //方法一:可以改变变量中存储的数值,数值默认由小到大的排序为abc
        //(1)让a中存储的数值最小(三个变量中最小)  故需满足:a<b且a<c
        if (a > b) {//保证a<b
            temp = a;
            a = b;
            b = temp;
        }
        if (a > c) {//保证a<c
            temp = a;
            a = c;
            c = temp;
        }
        //(2)让b中存储的数据为bc中最小的  故需满足:b<c
        if (b > c) {
            temp = b;
            b = c;
            c = temp;
        }
        //(3)通过比较,可以将数值按照由小到大的顺序分别存储在abc三个变量当中,按照顺序打印即可
        System.out.println("三个整数按照由小到大的顺序排列为:" + a + b + c);
        //注:数值默认由小到大的变量排序(abc)是可以改变的,方法一样,改变用于比较的变量名称即可


        //方法二:不改变变量中存储的数值,利用if语句进行比较,并按照由小到大的顺序将数值打印在控制台上
        //(1)比较a和b的大小
        if (a > b) {
            //(2)比较a和c的大小
            if (a > c) {//a>b且a>c 故a为最大值
                // (3)再比较b和c的大小
                if (b > c) {//a>b且a>c且b>c
                    System.out.println("三个整数按照由小到大的顺序排列为:" + c + b + a);
                } else {//a>b且a>c且b<c
                    System.out.println("三个整数按照由小到大的顺序排列为:" + b + c + a);
                }

            } else {//a>b且a<c
                System.out.println("三个整数按照由小到大的顺序排列为:" + b + a + c);
            }
        } else {//a<b
            //(2)比较b和c的大小
            if (b > c) {//a<b且b>c 故b为最大值
                //(3)再比较a和c的大小
                if (a > c) {//a<b且b>c且a>c
                    System.out.println("三个整数按照由小到大的顺序排列为:" + c + a + b);
                } else {//a<b且b>c且a<c
                    System.out.println("三个整数按照由小到大的顺序排列为:" + a + c + b);
                }
            } else {//a<b且b<c
                System.out.println("三个整数按照由小到大的顺序排列为:" + a + b + c);
            }
        }
        //注:方法二整体代码逻辑思维较为复杂,现在是在三个数排序,如果是四个数排序,使用这种方法几乎无法操作

        //以上两种方法仅适用于数值较少时进行排序,如排序数值较多则不便使用;
        //排序数值较多的情况下,可将其存储在定义好的数组中,利用数组的冒泡或选择排序会更为简便


    }
}