比较数组

时间:2016-04-26 20:14:19

标签: java arrays compare

我在java中有一个包含两个元素的数组。

我如何最好地决定是否应该添加theese或者只选择其中一个(哪个?)以便尽可能接近1000?

我做错了,它总是添加两个数字!

    if(myArray.length==2){
        int a = 1000-(myArray[0]);
        int b = 1000-(myArray[1]);
        int c = 1000-(myArray[0]+myArray[1]);

        if( (1000-a) < (1000-b)){
            if((a+b)<1000){
                bestAnswer = myArray[0]+myArray[1];
                }
                else{
                    bestAnswer = myArray[0];
                }
            }


        if( (1000-a) > (1000-b)){   
            if((a+b)<1000){
                bestAnswer = myArray[0]+myArray[1];
            }
                else{
                    bestAnswer = myArray[0];
                }
            }
        else{
            if((1000-(myArray[0]+myArray[1]))<(1000-(myArray[0]))){
                bestAnswer = myArray[0]+myArray[1];
            }
            else{
                bestAnswer = myArray[0];
            }
        }

4 个答案:

答案 0 :(得分:1)

您需要使用 c 的绝对值来捕获 c 超过1000的用例。

int a = 1000-(myArray[0]);
int b = 1000-(myArray[1]);
int c = Math.abs(1000-(myArray[0]+myArray[1]));         

if( a < Math.min(b, c)) {
    bestAnswer = myArray[0];
}
else if(b < Math.min(a, c)) {
    bestAnswer = myArray[1];
}
else {
    bestAnswer = myArray[0]+myArray[1];
}

答案 1 :(得分:1)

如果两个整数都是正数且小于或等于1000,那么这应该有效。

myArray[0] = 80;
myArray[1] = 90
int c = myArray[0] + myArray[1];

bestAnswer = myArray[0]; // 80

if (myArray[1] > myArray[0]) { // 90 > 80? Yes.
    bestAnswer = myArray[1]; // bestAnswer = 90
} 
if (c > myArray[1] && c <= 1000) { // 170 > 90? Yes.
    bestAnswer = c; // 170 = bestAnswer.
}

答案 2 :(得分:0)

试试这个

public class TestMain2 {

    public static void main(String[] args) {
        int a = 12;
        int b = 990;
        System.out.println(check(a,b));
    }

    public static String check(int a, int b) {
        String result = null;

        int aPlusBDiff = Math.abs(1000 - a - b);
        int aDiff = Math.abs(1000 - a);
        int bDiff = Math.abs(1000 - b);

        int min = Math.min(Math.min(aDiff, bDiff), aPlusBDiff);

        if(aPlusBDiff == min) {
            result = "Add both";
        } else if(aDiff == min) {
            result = "Choose A";
        } else {
            result = "Choose B";
        }

        return result;
    }
}

答案 3 :(得分:0)

这是一个更精简的版本

 public static int getClosestToThousand(int a, int b) {
    int closestSoFar = Math.abs(a - 1000) < Math.abs(b - 1000) ? a : b;
    return Math.abs(closestSoFar - 1000) < Math.abs(a + b - 1000) ? closestSoFar : a + b;
}