Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用if语句覆盖所有场景_Java_If Statement - Fatal编程技术网

Java 用if语句覆盖所有场景

Java 用if语句覆盖所有场景,java,if-statement,Java,If Statement,我正在做下面的家庭作业练习: 给定2个大于0的整数值,返回最接近21的数值,无需重复。如果两者都超过,则返回0 我编写了以下代码: public static void main(String[] args) { System.out.println(blackjack(22,22)); System.out.println(blackjack(25,25)); System.out.println(blackjack(19,25)); System.out.pr

我正在做下面的家庭作业练习:

给定2个大于0的整数值,返回最接近21的数值,无需重复。如果两者都超过,则返回0

我编写了以下代码:

public static void main(String[] args) {
    System.out.println(blackjack(22,22));
    System.out.println(blackjack(25,25));
    System.out.println(blackjack(19,25));
    System.out.println(blackjack(25,19));
    System.out.println(blackjack(10,10));
    System.out.println(blackjack(19,10));
    System.out.println(blackjack(1,19));
}

// Create a method like:
public static int blackjack(int a, int b) {
    if (a > 21 && b > 21) {
        return 0;
    }
    else if (a <= 21 || b > 21) {
        return a;
    }
    else if (a > 21 || b <= 21) {
        return b;
    }
    else if (a >= b) {
        return a;
    }
    else {
        return b;
    }
}
publicstaticvoidmain(字符串[]args){
系统输出println(21点(22,22));
System.out.println(21点(25,25));
系统输出打印LN(21点(19,25));
系统输出println(21点(25,19));
System.out.println(21点(10,10));
系统输出println(21点(19,10));
系统输出println(21点(1,19));
}
//创建如下方法:
公共静态整数21点(整数a、整数b){
如果(a>21&&b>21){
返回0;
}
若否(a 21){
返回a;
}
如果(a>21 | | b=b),则为else{
返回a;
}
否则{
返回b;
}
}
除了main中的最后一行输出之外,所有这些都可以工作。在这种情况下,我一直得到“a”或“1”,所以我不确定我的方法声明中的最后一行有什么问题。我有一种感觉有些不对劲,但我不确定要改变什么。

试试这个:

public static int blackjack(int a, int b){
    if ( a > 21 && b > 21){
        return 0;
    }
    else if ( a <= 21 && b > 21){
        return a;
    }
    else if ( a > 21 && b <= 21){
        return b;
    }
    else if ( a >= b){
        return a;
    }
    else {
        return b;
    }

}
publicstaticintblackjack(inta,intb){
如果(a>21&&b>21){
返回0;
}
若否(a 21){
返回a;
}
否则如果(a>21&&b=b){
返回a;
}
否则{
返回b;
}
}

您的问题在于第二个条件-
a 21
。由于您使用的是逻辑“or”运算符(
|
),因此如果第一部分为true,则此表达式的计算结果将为true,而不考虑第二部分。也就是说,如果
a
小于21,它将返回
a
的值,而不考虑
b
的值。第三种情况也存在同样的问题

您应该使用
&&
,而不是使用
|

if ( a > 21 && b > 21) {
    return 0;
}
else if ( a <= 21 && b > 21){
    return a;
}
else if ( a > 21 && b <= 21){
    return b;
}
else if ( a >= b){
    return a;
}
else {
    return b;
}
    if ( a > 21 && b > 21){
        return 0;
    }
    else if ( a <= 21 && b > 21){
        return a;
    }
    else if ( a > 21 && b <= 21){
        return b;
    }
    else if ( a >= b){
if(a>21&&b>21){
返回0;
}
若否(a 21){
返回a;
}
否则如果(a>21&&b=b){
返回a;
}
否则{
返回b;
}

您想要的
&&
位置:

if ( a > 21 && b > 21) {
    return 0;
}
else if ( a <= 21 && b > 21){
    return a;
}
else if ( a > 21 && b <= 21){
    return b;
}
else if ( a >= b){
    return a;
}
else {
    return b;
}
    if ( a > 21 && b > 21){
        return 0;
    }
    else if ( a <= 21 && b > 21){
        return a;
    }
    else if ( a > 21 && b <= 21){
        return b;
    }
    else if ( a >= b){
if(a>21&&b>21){
返回0;
}
若否(a 21){
返回a;
}
否则如果(a>21&&b=b){

如果不进行此更改,当a和b都小于22时,您将返回“a”。您可以在应该使用&(和)的位置使用| |(或)在
a21
a21 | b21行,因此您可以对这两行测试:
b21
a21

如果依赖一些数学运算,您还可以避免一些if语句:

private static final int TARGET = 21;
public static void main (String[] args) throws java.lang.Exception {
    System.out.println(blackjack(22,22)); //  0
    System.out.println(blackjack(25,25)); //  0
    System.out.println(blackjack(19,25)); // 19
    System.out.println(blackjack(25,19)); // 19
    System.out.println(blackjack(10,10)); // 10
    System.out.println(blackjack(19,10)); // 19
    System.out.println(blackjack(1,19));  // 19
}

public static int blackjack(int a, int b) {
    if ( a > TARGET && b > TARGET) {
        return 0;
    }

    return Math.abs(a - TARGET) < Math.abs(b - TARGET) 
       ? a 
       : b;
}
private static final int TARGET=21;
公共静态void main(字符串[]args)引发java.lang.Exception{
System.out.println(21点(22,22));//0
System.out.println(21点(25,25));//0
System.out.println(21点(19,25));//19
System.out.println(21点(25,19));//19
System.out.println(21点(10,10));//10
System.out.println(21点(19,10));//19
System.out.println(21点(1,19));//19
}
公共静态整数21点(整数a、整数b){
如果(a>目标(&b>目标){
返回0;
}
返回Math.abs(a-TARGET)
注意:这在这里是有效的,因为21不接近MAX_INT边界;如果它是溢出的,将是一个问题


另一种方法是先对两个数字进行排序。您不需要所有的if语句

public static int blackjack(int a, int b){
    int min = Math.min(a, b);
    int max = Math.max(a, b);
    if (max <= 21) {
        return max;
    } else {
        return min <= 21? min: 0;
    }
}
publicstaticintblackjack(inta,intb){
int min=Math.min(a,b);
int max=数学最大值(a,b);
如果(最大值试试这个

    public static int blackjack(int a,int b){
      if(a>21){return (b<21)?b:0;}else{
      if(b>21){return a;}else{return (a<b)?b:a;} 
      }
      }

如果(a 21){/code>和
如果(a>21 | | b),你需要将| |更改为&&in-
else if(a 21){/code>和
else if(a>21 | | | b)谢谢!我要强调的是,当a=20和b=22时,该方法不起作用。在进一步测试后,我发现当
atarget
目标
或反之亦然,该方法返回大于21的值(a或b)<30