Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 主持人如果陈述简短形式_Java - Fatal编程技术网

Java 主持人如果陈述简短形式

Java 主持人如果陈述简短形式,java,Java,ı希望对if语句使用缩写形式。ı如何在一行写入if语句?如何比较它们?我们知道这里有同样的问题。但我的声明没有其他内容,因此,如果没有其他声明,ı无法完成 public int compareTo(Uyum u) { if (uyum < u.uyum) return -1; if (uyum > u.uyum) return 1; return 0

ı希望对if语句使用缩写形式。ı如何在一行写入if语句?如何比较它们?我们知道这里有同样的问题。但我的声明没有其他内容,因此,如果没有其他声明,ı无法完成

public int compareTo(Uyum u) {
            if (uyum < u.uyum)
                return -1;
            if (uyum > u.uyum)
                return 1;
            return 0;
        }
你可能想要:

return a < b ? -1 : (a > b ? 1 : 0);

内联if语句问号通常仅在有两种状态时才需要。代码的可读性非常重要。 在您的情况下,您有3个状态0、1和-1;我不建议使用内联if语句

public int compareTo(Uyum u) {
            if (uyum < u.uyum)
                return -1;
            if (uyum > u.uyum)
                return 1;
            return 0;
        }
内联if语句示例:

String value = variable==null?"defaultvalue":variable;

此if语句表示法称为

,您可以使用三元运算符:

 return uyum < u.uyum ? -1 
      : uyum > u.uyum ? 1 
      : 0;

你可以简单地写下:

公共国际比较大学{

return uyum - u.uyum;
}在我看来,u.uyum是一个int,在这种情况下,为什么下面的结果不令人满意

return Integer.compare(uyum, u.uyum)
如果您确实必须使用三元运算符,您可以按照其他人的建议执行:

return uyum > u.uyum ? 1 : uyum == u.uyum ? 0 : -1


但是,这一点往往不被接受,因为它不是非常清晰。

返回uyum-u.uyum==0?0:uyum-u.uyum重复:使用三元运算符。返回uyumu.uyum?1 : 0;只是注意到它不是一个完整的副本。你有三种情况,简短的版本只适用于两种或两种以上,只适用于if-else,而不适用于if-else-if。@stonedsquirrel这只是因为你不习惯它。我一直在使用它,而且它非常可读,特别是当正确格式化成几行时。如果你有使用Clojure等语言的经验,它拥有cond结构,你会发现这一点也很明显。@Marko-也许你不需要它们,我需要:实际上,这个习语可以非常容易地写成几行,就像Lisp的cond宏,或者是从条件到结果的映射。顺便说一句,如果你有两个以上的条件,帕伦夫妇只会让事情变得更糟。@MarkoTopolnik你是对的,但在这种情况下,我无论如何都会用不同的代码。这不会返回正确的答案。结果应该是-1、0或1中的一个。@snipes83实际上,它会。检查Comparable上的文档。@MarkoTopolnik您如何知道OP正在实施Comparable?:OP没有说。@snipes83让我们假设这是对我的猜测:而且,即使他实现了Comparable,也存在极限情况——如果一个是Integer.MAX_值,另一个是Integer.MIN_值,会发生什么?如果运行Java 1.7,最好使用Integer.compareint a,int b,否则最好使用三元运算符。很抱歉弄乱了您的代码,但我只是想证明,无论有多少条件,这个习惯用法都非常可读和直观。@markoTopolnik感谢您使代码可读,始终接受有经验人士的建议:实际上,最后一个:0应该有一个更高级别的缩进,以便完全可读,否?@mdm否,所有冒号都应该对齐。想想如果,如果,如果,如果。同样的事情也会发生。@mdm那么在if-else-if级联中缩进最后一个else吗?这将是非常奇怪的,并且违反了惯例,但是这将直接模拟上面代码中最后一行的缩进。你怎么能说它是Int?它可以是短的,字符的,双的,甚至是布尔的。因此,Comparable uyum会将框转换为正确的类型。这不会导致调用compareToT yadda yadda yadda yadda吗?您是说强制转换为Comparable吗?这对我来说似乎有点可疑,所以我尝试了一下,但它没有编译。还是我遗漏了什么?@MarkoTopolnik我肯定是的,但这个出轨的评论线索的全部意义在于假装我们不知道uyum的类型,并找到一种方法来进行比较。如果我们知道uyum的类型,那么@Ingo和我的讨论就没有意义,也没有任何乐趣可言。我们喜欢娱乐。你不是吗?所以,出于好玩的精神,看看这个美:public int compareToUyum u{return compareuyum,u.uyum;}static int compareT left,t right{return left.compareTorright;}你可以使Uyumuyum成为任何你想要的数字类型。如果uyum是布尔值呢?@MarkoTopolnik是真的!Java不会比较布尔值!现在我更好地理解了人们为什么讨厌Java。@Ingo在人们为什么讨厌Java的所有事情中,我从来没有听说过不可弥补的布尔抱怨。我也从来没有过这样有用的用例,这里有一个:抽象某个类中的基本类型。考虑一下:我可以大致对以下类Person进行排序{int-gender;String-name,int-age;}现在有人来正确指出int-gender;最好是女性;现在,有了更好的设计,可分拣性就消失了?