Java 编码bat预热时遇到问题:max1020
有人能帮我解决这个问题吗?我已经很接近了,但我不明白我做错了什么。我试图以不同的方式重新编写代码,并研究了解决方案。如果有人能解释这个问题,那就太好了。我对编码和Java非常陌生,所以如果解决方案显而易见,我很抱歉。这就是问题所在 给定2个正int值,返回10到20范围内的较大值,如果两者都不在该范围内,则返回0Java 编码bat预热时遇到问题:max1020,java,Java,有人能帮我解决这个问题吗?我已经很接近了,但我不明白我做错了什么。我试图以不同的方式重新编写代码,并研究了解决方案。如果有人能解释这个问题,那就太好了。我对编码和Java非常陌生,所以如果解决方案显而易见,我很抱歉。这就是问题所在 给定2个正int值,返回10到20范围内的较大值,如果两者都不在该范围内,则返回0 max1020(11, 19) → 19 max1020(19, 11) → 19 max1020(11, 9) → 11 这是我的代码: public int max1020(
max1020(11, 19) → 19
max1020(19, 11) → 19
max1020(11, 9) → 11
这是我的代码:
public int max1020(int a, int b) {
int max = 0;
if(a>b){
max = a;
}else{
max = b;
}
if((a<=20 && a>=10)||(b<=20 && b>=10)){
return max;
}
return 0;
}
这里的问题是,如果两个值中的一个在范围内,您将返回最大值,并且您可以返回该范围内值的最大值 也就是说,在10和21之间,返回10,因为21,尽管更大,但超出范围 您可以更改您的功能,如下所示:
public int max1020(int a, int b) {
int max = 0;
if(a <= 20 && a >= 10){
max = a;
}
if (b > max && (b <= 20 && b >= 10)){
max = b;
}
return max;
}
这里的问题是,如果两个值中的一个在范围内,您将返回最大值,并且您可以返回该范围内值的最大值 也就是说,在10和21之间,返回10,因为21,尽管更大,但超出范围 您可以更改您的功能,如下所示:
public int max1020(int a, int b) {
int max = 0;
if(a <= 20 && a >= 10){
max = a;
}
if (b > max && (b <= 20 && b >= 10)){
max = b;
}
return max;
}
你似乎先算出最大值,然后-
if((a<=20 && a>=10)||(b<=20 && b>=10)){
return max;
}
上述代码返回max,而不管max是否实际在该范围内 您似乎首先计算出最大值,然后-
if((a<=20 && a>=10)||(b<=20 && b>=10)){
return max;
}
上述代码返回max,而不管max是否实际在该范围内 我将从实现您发布的测试工具开始,这是正确实现任何算法的非常有用的功能
public static void main(String[] args) {
int[][][] testCases = { { { 11, 19 }, { 19 } }, //
{ { 19, 11 }, { 19 } }, //
{ { 11, 9 }, { 11 } }, //
{ { 9, 21 }, { 0 } }, //
{ { 10, 21 }, { 10 } }, //
{ { 21, 10 }, { 10 } }, //
{ { 9, 11 }, { 11 } }, //
{ { 23, 10 }, { 10 } }, //
{ { 20, 10 }, { 20 } }, //
{ { 7, 20 }, { 20 } }, //
{ { 17, 16 }, { 17 } } };
for (int i = 0; i < testCases.length; i++) {
int a = testCases[i][0][0], b = testCases[i][0][1], c = testCases[i][1][0];
int r = max1020(a, b);
System.out.printf("max1020(%d, %d) -> %d %d %s%n", a, b, r, c,
c == r ? "OK" : "X");
}
}
测试线束的哪个输出
max1020(11, 19) -> 19 19 OK
max1020(19, 11) -> 19 19 OK
max1020(11, 9) -> 11 11 OK
max1020(9, 21) -> 0 0 OK
max1020(10, 21) -> 10 10 OK
max1020(21, 10) -> 10 10 OK
max1020(9, 11) -> 11 11 OK
max1020(23, 10) -> 10 10 OK
max1020(20, 10) -> 20 20 OK
max1020(7, 20) -> 20 20 OK
max1020(17, 16) -> 17 17 OK
我将从实现您发布的测试工具开始,这是正确实现任何算法的非常有用的功能
public static void main(String[] args) {
int[][][] testCases = { { { 11, 19 }, { 19 } }, //
{ { 19, 11 }, { 19 } }, //
{ { 11, 9 }, { 11 } }, //
{ { 9, 21 }, { 0 } }, //
{ { 10, 21 }, { 10 } }, //
{ { 21, 10 }, { 10 } }, //
{ { 9, 11 }, { 11 } }, //
{ { 23, 10 }, { 10 } }, //
{ { 20, 10 }, { 20 } }, //
{ { 7, 20 }, { 20 } }, //
{ { 17, 16 }, { 17 } } };
for (int i = 0; i < testCases.length; i++) {
int a = testCases[i][0][0], b = testCases[i][0][1], c = testCases[i][1][0];
int r = max1020(a, b);
System.out.printf("max1020(%d, %d) -> %d %d %s%n", a, b, r, c,
c == r ? "OK" : "X");
}
}
测试线束的哪个输出
max1020(11, 19) -> 19 19 OK
max1020(19, 11) -> 19 19 OK
max1020(11, 9) -> 11 11 OK
max1020(9, 21) -> 0 0 OK
max1020(10, 21) -> 10 10 OK
max1020(21, 10) -> 10 10 OK
max1020(9, 11) -> 11 11 OK
max1020(23, 10) -> 10 10 OK
max1020(20, 10) -> 20 20 OK
max1020(7, 20) -> 20 20 OK
max1020(17, 16) -> 17 17 OK
以下是我的解决方案:
public int max1020(int a, int b) {
return ((a>=10 && a<=20) && (b>=10 && b<=20))?(b>a?b:a)
:(a>=10 && a<=20)?a
:(b>=10 && b<=20)?b
:0;
}
以下是我的解决方案:
public int max1020(int a, int b) {
return ((a>=10 && a<=20) && (b>=10 && b<=20))?(b>a?b:a)
:(a>=10 && a<=20)?a
:(b>=10 && b<=20)?b
:0;
}
我的天啊!我的天啊!这可能行不通。你可以在这里测试你看不到链接吗?有趣的我现在明白了@是的!我修复了我的错误,上面的修复也应该可以。这可能不起作用。你可以在这里测试你看不到链接吗?有趣的我现在明白了@是的!我修复了我的错误,上面的修复程序也应该可以。