这可能是一个微不足道的问题,但我遇到了一个阵列声明的语法:
void someFunction(int n){
int[] myArray = new int[ n == 0 ? 1 : n ];
...
}
我尝试在网上查找一些教程,以了解发生的事情,但没有运气 任何人都可以解释右括号中的表达式,什么时候通常使用?
答案 0 :(得分:5)
正确的表达是'if /(then)/ else'
的'快捷方式'表达式的第一部分是'if',条件并且可以(但不一定)包括在括号中,以便澄清。
然后来了?,说“条件结束,结果是什么?” 之后是“真实”陈述,而冒号之后是“其他”陈述。
简而言之,这意味着:如果n == 0,则分配一个大小为1的数组,否则分配n个元素。
这是一种相当常见的c语法,也是缩短变量赋值的好方法,但与每个定义的数组没有任何关系。
答案 1 :(得分:2)
它基本上是if / else的语法糖。 Here's a link
答案 2 :(得分:1)
这是一个三元运营商。评估?
之前的布尔语句,如果是,则表达式计算为:
之前的值,否则计算结果为第二个值。
答案 3 :(得分:1)
这是一个长度为5的数组的简单声明:
int[] myArray = new int[5];
n == 0 ? 1 : n
提供了一个数字(1
如果n == 0
和n
,如果没有),它就是ternary operator的示例。
所以
int[] myArray = new int[ n == 0 ? 1 : n ];
是
的简写int[] myArray;
if (n == 0) {
myArray = new int[1];
} else {
myArray = new int[n];
}
答案 4 :(得分:1)
java三元运算符(?)用于检查n是否为0.如果n为零,则创建大小为1的数组。
如果n> 1,则使用它来创建数组。零长度数组在java中是合法的,因此不确定作者的意思。
如果要保护in的错误值应该检查n > 0 ? n :1
,那么即使负值也会得到一个大小为1的数组
答案 5 :(得分:1)
正如@ATaylor和@SperanskyDanil所说,
语法将在n=0
时创建 size 1 的数组,并在n
时创建大小为n != 0
的数组。
如下图所示。