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); } } }