冒号(:)运算符有什么作用?

时间:2010-03-08 06:09:45

标签: java for-loop foreach operators colon

显然在Java中以多种方式使用冒号。有人会介意解释它的作用吗?

例如:

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString += c + "\n";
}

您如何以不同的方式编写此for-each循环,以便不包含:

12 个答案:

答案 0 :(得分:174)

在Java代码中使用了几个冒号:

1)跳出标签(Tutorial):

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
    }
} 
// i.e. jumps to here

2)三元条件(Tutorial):

int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8

3)For-each循环(Tutorial):

String[] ss = {"hi", "there"}
for (String s: ss) {
    print(s); // output "hi" , and "there" on the next iteration
}

4)断言(Guide):

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语句中的大小写(Tutorial):

switch (type) {
    case WHITESPACE:
    case RETURN:
        break;
    case NUMBER:
        print("got number: " + value);
        break;
    default:
        print("syntax error");
}

6)方法参考(Tutorial

class Person {
   public static int compareByAge(Person a, Person b) {
       return a.birthday.compareTo(b.birthday);
   }}
}

Arrays.sort(persons, Person::compareByAge);

答案 1 :(得分:34)

没有“冒号”操作符,但冒号出现在两个地方:

1:在三元运算符中,例如:

int x = bigInt ? 10000 : 50;

在这种情况下,三元运算符充当表达式的“if”。如果bigInt为true,则x将为其分配10000。如果没有,50。这里的冒号意味着“别的”。

2:在for-each循环中:

double[] vals = new double[100];
//fill x with values
for (double x : vals) {
    //do something with x
}

依次将x设置为'vals'中的每个值。因此,如果vals包含[10,20.3,30,...],那么x将在第一次迭代时为10,在第二次迭代时为20.3,等等。

注意:我说它不是运算符,因为它只是语法。它本身不能出现在任何给定的表达式中,而且for-each和三元运算符都只使用冒号。

答案 2 :(得分:17)

只是添加,当在for-each循环中使用时,“:”基本上可以读作“in”。

所以

for (String name : names) {
    // remainder omitted
}

应该是“对于每个名字IN名称做...”

答案 3 :(得分:15)

  

你怎么用不同的方式为每个循环写这个,以便不包含“:”?

假设listCollection个实例......

public String toString() {
   String cardString = "";
   for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
      PlayingCard c = it.next();
      cardString = cardString + c + "\n";
   }
}

我应该在这种情况下添加:不是运算符的迂腐点。运算符在表达式中执行操作,根据JLS,( ... )语句中for内的内容不是表达式。

答案 4 :(得分:1)

它用于for循环迭代对象列表。

for (Object o: list)
{
    // o is an element of list here
}

将其视为Python中的for <item> in <list>

答案 5 :(得分:1)

您通常会在三元赋值运算符中看到它;

语法

variable =  `condition ? result 1 : result 2;`

示例:

boolean isNegative = number > 0 ? false : true;

与if else

在本质上是“等同的”
if(number > 0){
    isNegative = false;
}
else{
    isNegative = true;
}

除了不同海报给出的例子外,

你也可以使用:表示一个块的标签,你可以将它与continue和break一起使用..

例如:

public void someFunction(){
     //an infinite loop
     goBackHere: { //label
          for(int i = 0; i < 10 ;i++){
               if(i == 9 ) continue goBackHere;
          }
     }
}

答案 6 :(得分:1)

在您的具体情况下,

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString = cardString + c + "\n";
}

this.list是一个集合(列表,集合或数组),该代码将c分配给集合的每个元素。

所以,如果this.list是一个集合{“2S”,“3H”,“4S”},那么最后的cardString就是这个字符串:

2S
3H
4S

答案 7 :(得分:1)

它将打印字符串“something”三次。

JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};                   

for ( JLabel label : labels )                  
 {              
   label.setText("something");  

 panel.add(label);             
 }

答案 8 :(得分:1)

由于大多数for循环非常相似,因此Java提供了一种减少循环的快捷方式    写入循环所需的代码量称为每个循环。

以下是每个循环的简洁示例:

for (Integer grade : quizGrades){
      System.out.println(grade);
 }    

在上面的示例中,冒号(:)可以在&#34;中读作&#34;。每个循环    对于每个整数元素(称为等级),总共可以读作&#34;    quizGrades,打印出成绩的价值。&#34;

答案 9 :(得分:0)

它用于/ loop的新简写

final List<String> list = new ArrayList<String>();
for (final String s : list)
{
   System.out.println(s);
}

和三元运算符

list.isEmpty() ? true : false;

答案 10 :(得分:0)

冒号实际上与?

一起存在
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)

答案 11 :(得分:0)

冒号用于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);
                   }
       }
}