Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.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_Ternary Operator - Fatal编程技术网

Java 三元运算符是如何工作的?

Java 三元运算符是如何工作的?,java,ternary-operator,Java,Ternary Operator,在codewars中,我用15行代码完成了一个kata using for循环,其他人只用了7行代码就完成了它。有人能解释一下密码吗 public class CamelCase { public static String cAmEl(final String yourName) { final int length = yourName.length(); final StringBuilder cAmEl = new StringBuilder(le

在codewars中,我用15行代码完成了一个kata using for循环,其他人只用了7行代码就完成了它。有人能解释一下密码吗

public class CamelCase {
    public static String cAmEl(final String yourName) {
        final int length = yourName.length();
        final StringBuilder cAmEl = new StringBuilder(length);
        boolean upper = true;
        for (int i = 0; i < length; i++, upper ^= true) {
            final char c = yourName.charAt(i);
            cAmEl.append(upper ? toUpperCase(c) : toLowerCase(c));
        }
        return cAmEl.toString();
    }
}
此行将下一个字符附加到
StringBuilder
。如果大写字母为
true
,它将追加
toUpperCase(c)
;如果大写字母为
false
,它将追加toLowerCase(c)。它使用三元运算符,类似于:

if (upper)
    cAmEl.append (toUpperCase(c));
else
    cAmEl.append (toLowerCase(c));
由于upper在true和false之间交替(这是XOR运算符在此所做的-
upper^=true
),这意味着输出字符将根据需要在大写和小写之间交替

此行将下一个字符附加到
StringBuilder
。如果大写字母为
true
,它将追加
toUpperCase(c)
;如果大写字母为
false
,它将追加toLowerCase(c)。它使用三元运算符,类似于:

if (upper)
    cAmEl.append (toUpperCase(c));
else
    cAmEl.append (toLowerCase(c));

由于upper在true和false之间交替(这是XOR运算符在此所做的-
upper^=true
),这意味着输出字符将根据需要在大写和小写之间交替。

不是直接的答案,但您可以在一行(相当长的)代码中完成:

return yourName.length() <= 1 ? yourName.toUpperCase() : "" + Character.toUpperCase(yourName.charAt(0)) + Character.toLowerCase(yourName.charAt(1)) + cAmEl(yourName.substring(2)); 

返回yourName.length()

return yourName.length() <= 1 ? yourName.toUpperCase() : "" + Character.toUpperCase(yourName.charAt(0)) + Character.toLowerCase(yourName.charAt(1)) + cAmEl(yourName.substring(2)); 

返回yourName.length()。
三元包含三个部分。
第一部分:条件

upper
第二部分:真实陈述

toUpperCase(c)
第三部分:虚假陈述

toLowerCase(c)
正如您在for语句中看到的,upper将是XOR到文字值true

for (int i = 0; i < length; i++, upper ^= true)
for(int i=0;i

因此,在for语句的每次迭代中,上一个变量的值都是相反的,因此将调用三元中的true语句和false语句。

您不理解的部分是三元。 三元包含三个部分。 第一部分:条件

upper
第二部分:真实陈述

toUpperCase(c)
第三部分:虚假陈述

toLowerCase(c)
正如您在for语句中看到的,upper将是XOR到文字值true

for (int i = 0; i < length; i++, upper ^= true)
for(int i=0;i

因此,在for语句的每次迭代中,上限变量的值将是反向的,因此将调用三元形式的true语句和false语句。

它是一个if-else,if-upper-then-toUpperCase()else-toLowerCase()的可能副本,它是一个if-else,if-upper-then-toUpperCase()else-toLowerCase()的可能副本可能重复的可能重复,而
bool?foo:bar
是三元运算符(就像
++
是一元运算符,
a*b
是二元运算符一样),因为Java没有更多的三元运算符,所以人们使用“trialary”就好像它是这个运算符的正确名称一样。但是,由于我们不能保证将来Java不会添加更多的三元运算符,因此最好使用它的专有名称,即“”。来调用它,而
bool是真的吗?foo:bar
是三元运算符(就像
++
是一元运算符,
a*b
是二元运算符一样),因为Java没有更多的三元运算符,所以人们使用“trialary”就好像它是这个运算符的正确名称一样。但由于我们不能保证将来Java不会添加更多的三元运算符,因此最好用它的专有名称来称呼它,即“”。