-3

我想找出一种更有效的方法来创建这个程序。是否可以使用其他形式的循环或语句来代替if-else语句?

这是代码:

class apples {
  public static void main(String[] args) {
    byte x, y;
    x = 15;
    y = 28;

    boolean state = (true || false);

    if (x == y) {
        System.out.println(state);
    } else if (x > y) {
        System.out.println(state);
    } else if (x < y) {
        System.out.println(state);
    } else {
        System.out.println(state);
    }

  }
}
4

5 回答 5

2

输出总是和总是结果true一样。||truetrue

删除这一行:

boolean state = (true || false);

将其更改为:

  boolean state = (x==y);
    System.out.println(state);
于 2013-08-05T23:02:16.643 回答
1

我假设这只是你想要做的例子。如果没有,代码可以替换System.out.println(true);为 rgettman 提到的。

最后一个 else 当然永远不会被执行,因为数字相等,或者一个更大,所以它可以被删除:

if (x == y) {
    System.out.println("They are equal");
} else if (x > y) {
    System.out.println("x is greater");
} else {
    System.out.println("x is smaller");
}

if-then 语句的替代方法是:

switch (Integer.compare(x, y))
{
   case -1: System.out.println("x is smaller"); break;
   case 0: System.out.println("They are equal"); break;
   default: System.out.println("x is greater"); // case 1
}

Integer.compare是 Java 7 及更高版本,在此之前您必须使用Integer.valueOf(x).compareTo(y)

于 2013-08-05T23:04:44.960 回答
1

扩展评论的内容:在您的if/else序列中,每个条件都有相同的执行块。由于相同的输出是通过多个输入实现的(其中任何一个为真都会导致输出),您可以将其浓缩为:

if (x == y) {
    System.out.println(state);
} else if (x > y) {
    System.out.println(state);
} else if (x < y) {
    System.out.println(state);
} else {
    System.out.println(state);
}

进入这个:

if(x == y || x > y || x < y){
    System.out.println(state);
} else { 
    System.out.println(state);
}

这里有两个注意事项。首先,布尔表达式x == y || x > y || x < y(对于数字类型,如byte,并假设变量已定义)包括所有可能性——x 必须等于、大于或小于y。这意味着这始终x == y || x > y || x < y是正确的,因此该块没有意义。else

第二个注意事项是,一般来说,当你有这样的事情时,两个执行块是相同的代码:

if(expression){
    doSomething();
} else {
    doSomething();
}

无论如何,doSomething();代码将始终被执行,因此不需要条件,可以简单地调用代码并完成它。

于 2013-08-05T23:10:00.110 回答
0

你没有提供关于周围逻辑的太多细节state

编写程序的另一种方法是在 Map 中进行Map<Integer, Output>、doByte.compareTo(anotherByte)和查找以获得所需的输出。

于 2013-08-05T22:59:59.710 回答
0

正如其他人所指出的:

boolean b = (true || false);

将始终设置btrue. 我相信这就是您正在寻找的东西:

public static boolean compBytes(byte x, byte y)
{
    return (x.compareTo(y) > 0) ? true : false;
}

但这只有在您想要<并且==都返回 false 时才有效。我认为你真正想要的是:

public static int compBytes(byte x, byte y)
{
    return x.compareTo(y);
}

然后,您可以使用switch 语句来处理这些情况。

于 2013-08-05T23:05:11.553 回答