Đối với vấn đề cụ thể này, vì câu trả lời luôn luôn trả s
:
....
return s;
....
return s && b;
....
return s && c;
....
return s && d;
....
bạn chỉ có thể trả về giá trị 2. Tôi sử dụng 0 để chỉ "chỉ s
" vì trường hợp đầu tiên (if (s==g)
) có thể được coi là if (s+0==g)
. Sử dụng giá trị sentinel khác với 0 cho điều này, nếu cần.
public static int calc (int s, int b, int c, int d, int g)
{
if (s==g)
return 0;
else if (s+b==g)
return b;
else if (s+c==g)
return c;
else if (s+d==g)
return d;
else {
// System.out.println("No Answer");
// Probably better to throw or return a sentinel value of
// some type rather than print to screen. Which way
// probably depends on whether "no answer" is a normal
// possible condition.
throw new IndexOutOfBoundsException("No Answer");
}
}
Nếu không có ngoại lệ được ném, sau đó s
luôn luôn là kết quả đầu tiên:
try {
int result1 = s;
int result2 = calc(s, b, c, d, g);
} catch (IndexOutOfBoundsException ex) {
System.out.println("No Answer");
}
Nguồn
2010-09-06 03:23:41
Ngoài ra, lưu ý rằng trong "không có câu trả lời" trường hợp, phương pháp này ** phải ** trả về một sản phẩm nào 'int []'. –
"phải"? Nó không thể trả về null hoặc ném một ngoại lệ? – Gabe
@Gabe - đúng - nhưng tại sao anh ta lại gọi println? –