找到更高和更低的数字

时间:2018-11-01 08:37:10

标签: java

我需要编写一个将从用户5号(a b c d e)获取的程序 并打印最低和最高数字。 我该怎么做,并使用较少的if-elss条件?  我不能使用arry或loops。

    if (a>b) {
        min=b ;
        max=a ;
    }else {
        min=a ;
        max=b ;
        int temp = a ;
        a=b ;
        b=temp ;
    }
    if (b>c) {
        min=c ; 
    }else {
        if(c>max) {
            max=c ;}
        int temp = b ;
        b=c ;
        c=temp ;
    }
    if (c>d) {
        min=d ;
    }else {
        if(d>max) {
            max=d ;}
        int temp = c ;
        c=d ;
        d=temp ;
    }
    if (d>e) {
        min=e ;

    }else {
        if(e>max) {
            max=e ;}
        int temp = d ;
        d=e ;
        e=temp ;}

4 个答案:

答案 0 :(得分:1)

一种选择是将五个输入数字添加到数组中,然后使用流查找最小值和最大值:

int a = myScanner.nextInt();
int b = myScanner.nextInt();
int c = myScanner.nextInt();
int d = myScanner.nextInt();
int e = myScanner.nextInt();
int[] vals = {a, b, c, d, e};
int min = Arrays.stream(vals).min().getAsInt();
int max = Arrays.stream(vals).max().getAsInt();
System.out.println(min);
System.out.println(max);

另一个选择可能是使用集合(例如列表)来存储五个输入数字。然后,我们可以对该集合进行排序,并以此方式找到最小值/最大值。使用某种收集可能是实现此目的的最佳方法。

编辑:

如果必须使用if语句,则一个选择可能是比较成对的前两个数字和后两个数字,然后从结果三个数字中找到最小值/最大值。我从this Code Review问题改编了minmax方法。它会找到三个数字的最小值和最大值,因此我们只需要提出其他逻辑即可将五个输入减少到三个。

public static int min(int a, int b, int c) {
    if (a <= b && a <= c) return a;
    if (b <= a && b <= c) return b;
    return c;
}

public static int max(int a, int b, int c) {
    if (a >= b && a >= c) return a;
    if (b >= a && b >= c) return b;
    return c;
}

// now the logic for your inputs a, b, c, d, e
int min1 = a <= b ? a : b;
int min2 = c <= d ? c : d;
int max1 = a >= b ? a : b;
int max2 = c >= d ? c : d;

int finalmin = min(min1, min2, e);
int finalmax = max(max1, max2, e);

答案 1 :(得分:0)

我认为流就像使用循环一样,所以简单点吧:

int min = a;
int max = a;

if (max < b) {max = b;} 
if (min > b) {min = b;} 

if (max < c) {max = c;} 
if (min > c) {min = c;} 

...

System.out.println(min);
System.out.println(max);

答案 2 :(得分:0)

int min = Math.min(a, b);
min = Math.min(c, min);
min = Math.min(d, min);
min = Math.min(e, min);

int max = Math.max(a, b);
max = Math.max(c, max);
max = Math.max(d, max);
max = Math.max(e, max);

如果您不允许使用Math.min和Math.max,只需为自己实现一个方法,如:

int min(int a, int b) {
    return a < b ? a : b;
}

int max(int a, int b) {
    return a > b ? a : b;
}

答案 3 :(得分:0)

您需要做的是在相反的极端处初始化最小值和最大值,并定义一个变量来保存最新输入;

int max=Integer.MIN_VALUE;
int min=Integer.MAX_VALUE;
int input;

然后,您输入一个输入并检查输入是新的min还是max

input = myScanner.nextInt() ;
if(input<min){...}
if(input>max){...}

然后,您只需将其复制粘贴多次即可,以获取输入(通常,您会使用for循环,但无论如何)。