为什么我的程序不接受我返回的布尔结果?

时间:2019-12-30 12:26:35

标签: java

如果x和y均为“ true”,我只想返回true。

我想使用switch / case方法,而不是简单的if / else。

但是我无法获得接受返回结果的方法。

你们有个主意吗?

 public class test2 {
     public static boolean f(boolean x, boolean y){
        switch(x + "-" + y){            
        case "true-false": 
             return false; //i also tried "return x" or "return y"
        case "false-true": 
             return false;
        case "true-true": 
             return true;
        case "false-false": 
             return false; 
        }
    }


    public static void main(String[]args){
        f(false,true);
    }   
}

5 个答案:

答案 0 :(得分:2)

首先,程序原样无法编译。编译器将抱怨方法f缺少return语句。 switch是穷举性的,但是编译器无法推断出这种穷举性,因此,如果没有case匹配,则会抱怨缺少返回。一种可能的解决方案是将default的情况添加为RamPrakash shows in his answer。另一种可能性是在方法末尾添加一个return。我认为,这两种解决方案都是次优的,稍后再讨论。

使用给定的修复程序,代码可以按预期工作。由于从不打印结果,因此不会在屏幕上显示结果。对该程序进行稍作修改的版本即可获得预期的结果:

class Ideone {
  public static boolean f(final boolean x, final boolean y) {
    switch (x + "-" + y) {
      case "true-false":
        return false;
      case "false-true":
        return false;
      case "true-true":
        return true;
      case "false-false":
        return false;
    }
    return false;
  }

  public static void main(final String[] args) {
    System.out.println(f(false, false));
    System.out.println(f(false, true));
    System.out.println(f(true, false));
    System.out.println(f(true, true));
  }
}

Ideone demo


我会建议一种不同的解决方案:与其构建两个参数的String表示,不如返回两个参数x && y的AND乘积。例如,它摆脱了次优的return(尽管在方法结尾或在default情况下)。另一方面,这更有效。计算时间和内存消耗。

答案 1 :(得分:0)

您的代码太复杂了,可以简单地更改为:

 public class test2 {
 public static boolean f(boolean x, boolean y){
    return x && y;
}


public static void main(String[]args){
    f(false,true);
}   

}

答案 2 :(得分:0)

应该有一个默认的return语句,因为它在询问return语句,所以不会编译。

public class Test {
   public static boolean f(boolean x, boolean y){
        switch(x + "-" + y){
            case "true-false":
                return false; //i also tried "return x" or "return y"
            case "false-true":
                return false;
            case "true-true":
                return true;
            case "false-false":
                return false;
            default: return false;
        }
    }

    public static void main(String[]args){
        System.out.println(f(false,true));
    }
}

答案 3 :(得分:-1)

更好的编码方式是return x && y,而不是在字符串中使用switch。无需将布尔值转换为字符串。有多种方法可以实现OP想要完成的任务。

public class Main
    {
        public static boolean f(boolean x, boolean y){
            return x && y;
       }


        public static void main(String[]args){
           System.out.println(f(false,true));
        }
    }

问题中的代码无法编译。 您可以通过多种方法来解决代码编译错误

按#1修复编译错误

default的大小写添加到switch,如下所示

public class Main
{
    public static boolean f(boolean x, boolean y){

        switch(x + "-" + y){

        case "true-false": 
             return false; //i also tried "return x" or "return y"
        case "false-true": 
             return false;
        case "true-true": 
             return true;
        case "false-false": 
             return false; 
        default:
            return false;
        }

    }


    public static void main(String[]args){
        System.out.println(f(false,true));
    }
}

按#2修复编译错误

public class Main
    {
        public static boolean f(boolean x, boolean y){

            switch(x + "-" + y){

            case "true-false": 
                 return false; //i also tried "return x" or "return y"
            case "false-true": 
                 return false;
            case "true-true": 
                 return true;
            case "false-false": 
                 return false; 
            }
            return false;
        }


        public static void main(String[]args){
           System.out.println(f(false,true));
        }
    }

注意: :在我的示例中,我更改了类名。 如果我是你,那么我会选择return x && y

答案 4 :(得分:-1)

在case语句的末尾添加默认值。

default:
   return true;

然后在控制台中查看函数返回结果,请使用System.out.println()在控制台中查看。

System.out.println(f(false,true));