96 votes

Java: que fait l'opérateur deux-points (:)?

Je le regarderais moi-même, mais je ne sais même pas comment ça s'appelle. Est-ce que quelqu'un pourrait expliquer ce que ça fait?

EDIT: Je ne savais pas qu'il y avait plusieurs fois le: est apparu. Que fait-il dans ce cas ici:

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

Edit: Comment écririez-vous cette boucle de manière différente afin de ne pas incorporer le ":"?

203voto

yuku Points 15705

Il y a plusieurs endroits où deux points sont utilisés dans le code Java:

1) étiquette de sortie:

 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) condition ternaire:

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

3) pour chaque boucle:

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

4) Assertion:

 int a = factorial(b);
assert a >= 0: "factorial may not be less than 0"; // quits the program with the message if the condition evaluates to false
 

5) Affaire dans l'instruction switch:

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

34voto

Claudiu Points 58398

Il n'y a pas de "colon" de l'opérateur, mais le côlon apparaît à deux endroits:

1: l'opérateur ternaire, par exemple:

int x = bigInt ? 10000 : 50;

Dans ce cas, l'opérateur ternaire agit comme un 'si' pour les expressions. Si bigInt est vrai, alors x obtiendrez 10000 lui est assigné. Si pas, 50. Le côlon signifie ici "autre chose".

2: Dans une boucle for-each:

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

Ce jeux x pour chacune des valeurs dans 'vals' à son tour. Donc, si vals contient [10, 20.3, 30, ...], alors x sera de 10 à la première itération, 20.3 sur la deuxième, etc.

Note: je dis que c'est pas un opérateur parce que c'est juste la syntaxe. Il ne peut pas apparaître dans une expression donnée par lui-même, et c'est juste de la chance que les deux pour chacun et l'opérateur ternaire utiliser un deux-points.

20voto

helpermethod Points 11015

Il suffit d'ajouter que, lorsqu'il est utilisé dans une boucle for-each, le ":" peut fondamentalement être lu comme "in".

Alors

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

devrait être lu "Pour chaque nom dans les noms faire ..."

16voto

Stephen C Points 255558

Comment écririez-vous cette boucle for-each une manière différente, de manière à ne pas intégrer le ":"?

En supposant que l' list est Collection exemple ...

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

Je devrais ajouter le pédant point qu' : n'est pas un opérateur dans ce contexte. Un opérateur effectue une opération dans une expression, et les trucs à l'intérieur de l' ( ... ) en for déclaration n'est pas une expression ... selon la JLS.

1voto

Mike Cialowicz Points 4490

Il est utilisé dans les boucles pour parcourir une liste d'objets.

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

Pensez-y comme à for <item> in <list> en Python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X