Java:冒号(:)运算符是做什么的?
我会自己去看,但是我甚至不知道它叫什么。 有人会介意解释它做什么?
我不知道有多less次出现。 它在这种情况下在这里做什么:
public String toString() { String cardString = ""; for (PlayingCard c : this.list) // <-- { cardString = cardString + c + "\n"; }
你将如何for-each
循环写一个不同的方式,以便不包含“:”?
Java代码中有几个地方使用冒号:
1)跳出标签( 教程 ):
label: for (int i = 0; i < x; i++) { for (int j = 0; j < i; j++) { if (something(i, j)) break label; // jumps out of the i loop } } // ie jumps to here
2)三元条件( 教程 ):
int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8
3)For-each循环( 教程 ):
String[] ss = {"hi", "there"} for (String s: ss) { print(s); // output "hi" , and "there" on the next iteration }
4)声明( 指南 ):
int a = factorial(b); assert a >= 0: "factorial may not be less than 0"; // throws an AssertionError with the message if the condition evaluates to false
5)切换语句( 教程 )中的情况:
switch (type) { case WHITESPACE: case RETURN: break; case NUMBER: print("got number: " + value); break; default: print("syntax error"); }
6)方法参考( 教程 )
class Person { public static int compareByAge(Person a, Person b) { return a.birthday.compareTo(b.birthday); }} } Arrays.sort(persons, Person::compareByAge);
没有“冒号”操作符,但冒号出现在两个地方:
1:在三元运算符中,例如:
int x = bigInt ? 10000 : 50;
在这种情况下,三元运算符充当expression式的“if”。 如果bigInt是真的,那么x将得到10000分配给它。 如果没有,50.这里的冒号意思是“其他”。
2:在for-each循环中:
double[] vals = new double[100]; //fill x with values for (double x : vals) { //do something with x }
这将x设置为“val”中的每个值。 所以如果vals包含[10,20.3,30,…],那么x在第一次迭代中将是10,在第二次中是20.3等等。
注意:我说这不是一个操作符,因为它只是语法。 它本身不能出现在任何给定的expression式中,这只是for-each和ternary操作符都使用冒号的机会。
只要添加,在for-each循环中使用时,“:”基本上可以被读为“in”。
所以
for (String name : names) { // remainder omitted }
应该阅读“对于每个名字IN名称…”
你将如何为每个循环写一个不同的方式,以便不包含“:”?
假设list
是一个Collection
实例…
public String toString() { String cardString = ""; for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) { PlayingCard c = it.next(); cardString = cardString + c + "\n"; } }
我应该加上这样的迂腐点:
在这种情况下不是运营商。 一个操作符在一个expression式中执行一个操作,并且for
语句中( ... )
中的东西不是根据JLS的expression式。
它用于循环遍历对象列表。
for (Object o: list) { // o is an element of list here }
把它想象成Python for <item> in <list>
中的for <item> in <list>
。
在你的具体情况下,
String cardString = ""; for (PlayingCard c : this.list) // <-- { cardString = cardString + c + "\n"; }
this.list
是一个集合(列表,集合或数组),并且该代码将c
赋给集合的每个元素。
所以,如果this.list
是一个集合{“2S”,“3H”,“4S”}那么最后的cardString
就是这个string:
2S 3H 4S
你通常在三元赋值运算符中看到它;
句法
variable = `condition ? result 1 : result 2;`
例:
boolean isNegative = number > 0 ? false : true;
这在性质上是“等价的”
if(number > 0){ isNegative = false; } else{ isNegative = true; }
除了不同海报的例子,
你也可以使用:来表示一个块的标签,你可以使用这个标签来继续和断开。
例如:
public void someFunction(){ //an infinite loop goBackHere: { //label for(int i = 0; i < 10 ;i++){ if(i == 9 ) continue goBackHere; } } }
它会打印string“东西”三次。
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()}; for ( JLabel label : labels ) { label.setText("something"); panel.add(label); }
由于大多数for循环非常相似,所以Java提供了一个快捷方式来减less编写循环所需的代码量。
下面是每个循环简明的例子:
for (Integer grade : quizGrades){ System.out.println(grade); }
在上面的例子中,冒号(:)可以被读为“in”。 对于每个循环共计可以被读作“为每个Integer元素(称为级别)在测验格式,打印出分级的价值。
它被用于新的短手/循环
final List<String> list = new ArrayList<String>(); for (final String s : list) { System.out.println(s); }
和三元运算符
list.isEmpty() ? true : false;
冒号实际上是和?
int minVal = (a < b) ? a : b;
相当于:
int minval; if(a < b){ minval = a;} else{ minval = b; }
同样在每个循环中:
for(Node n : List l){ ... }
从字面上:
for(Node n = l.head; n.next != null; n = n.next)
冒号用于for-each循环,试试这个例子,
import java.util.*; class ForEachLoop { public static void main(String args[]) {`enter code here` Integer[] iray={1,2,3,4,5}; String[] sray={"ENRIQUE IGLESIAS"}; printME(iray); printME(sray); } public static void printME(Integer[] i) { for(Integer x:i) { System.out.println(x); } } public static void printME(String[] i) { for(String x:i) { System.out.println(x); } } }