我在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];
}
}
答案 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;
}