2017-06-24 42 views
-1

String key = offset == -1 ? keyStroke : keyStroke.substring(offset + 1); 我在网上找到了一些代码的例子,它包含了我不明白的这一行。这些操作员在做什么? String key = offset == -1? keyStroke:keyStroke.substring(offset + 1);

这是在key binding example中找到的一段代码。具体而言,“KeyboardAnimation.java”行37.

这可能会遇到一个愚蠢的问题,但我不知道这里发生了什么。我可以花很长时间做研究,但我觉得这可以通过某人相当容易地解释(我可以更详细地介绍我的推理,但这不是重点)。

我得知,它将String类型的变量key设置为某个值。 keyStroke是格式化按键的字符串:

解析字符串并返回KeyStroke。该字符串必须具有以下语法:
*(|)

修饰符:= shift |控制| ctrl | meta | alt |同时按下AltGraph

typedID:=键入

typedKey:=长度为1给出的Unicode字符的字符串。

pressedReleasedID:=(压|释放)键

键:= KeyEvent的键代码的名称,即下面的 “VK_” 的名称。

如果未指定键入,按下或释放,则假定已按下。这里有>一些例子:

"INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0); 
"control DELETE" => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK); 
"alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK); 
"alt shift released X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true); 
"typed a" => getKeyStroke('a'); 

(来自:击键javax.swing.KeyStroke.getKeyStroke(String s)将)

现在,要进什么,我居然不知道:为什么它似乎在那里有一个布尔运算符?问号是做什么的?结肠是做什么的?

我觉得这是我的东西之前应该已经学会了,但还没有...

+0

1.条件运算符'? :(或三元)和2.在两个“int”常量(它们表示位掩码)上按位或者。 –

+0

三元运算符是else if语句的缩写:if(String key = offset == -1){keyStroke} else {keyStroke.substring(offset + 1); } –

+0

对不起,我还是不太明白你们的意思......就@艾略特的评论而言,什么是位掩码?按位或两个int常量?而且,Fady,如果这样的陈述会做什么?我有点儿搞错了,但对细节还是有点困惑......我只学了一个学期的Java,所以我提前为无知的问题道歉... –

回答

1
String key = offset == -1 ? keyStroke : keyStroke.substring(offset + 1); 

这是一个变量的声明和初始化。它定义了一个变量:

String key 

,并立即对其进行初始化:

String key = ...; 

现在,它的右边的值,用来初始化字符串?这是一个三元声明,这是形式的表达式:

condition ? valueIfTrue : valueIfFalse 

这个表达式因而具有价值valueIfTrue如果布尔表达式condition是真实的,价值valueIfFalse如果布尔表达式condition是假的。

在你的情况下,关键变量因此与keyStroke如果offset == -1值初始化为真,或与keyStroke.substring(offset + 1)如果offset == -1值为false。

整个事情可以被改写为

String key; 
if (offset == -1) { 
    key = keyStroke; 
} 
else { 
    key = keyStroke.substring(offset + 1); 
}