Wat doet de dubbele punt (:) operator?

Blijkbaar wordt een dubbele punt in Java op meerdere manieren gebruikt. Zou iemand willen uitleggen wat het doet?

Bijvoorbeeld hier:

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

Hoe zou je deze for-each-lus op een andere manier schrijven, zodat de :niet wordt gebruikt?


Antwoord 1, autoriteit 100%

Er zijn verschillende plaatsen waar dubbele punten worden gebruikt in Java-code:

1) Jump-out-label (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) Ternaire voorwaarde (Tutorial):

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

3) Voor elke lus (Tutorial):

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

4) Bewering (Gids) :

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) Geval in switch-statement (Tutorial):

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

6) Methodeverwijzingen (Tutorial)

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

Antwoord 2, autoriteit 17%

Er is geen “dubbele punt”-operator, maar de dubbele punt verschijnt op twee plaatsen:

1: In de ternaire operator, bijv.:

int x = bigInt ? 10000 : 50;

In dit geval fungeert de ternaire operator als een ‘if’ voor expressies. Als bigInt waar is, krijgt x 10000 toegewezen. Zo niet, 50. De dubbele punt betekent hier “anders”.

2: In een for-each-lus:

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

Hiermee wordt x achtereenvolgens ingesteld op elk van de waarden in ‘vals’. Dus als vals [10, 20.3, 30, …] bevat, dan is x 10 bij de eerste iteratie, 20,3 bij de tweede, enz.

Opmerking: ik zeg dat het geen operator is omdat het gewoon syntaxis is. Het kan op zichzelf in geen enkele uitdrukking voorkomen, en het is gewoon toeval dat zowel de for-each als de ternaire operator een dubbele punt gebruiken.


Antwoord 3, autoriteit 9%

Om toe te voegen, wanneer gebruikt in een for-each-lus, kan de “:” in principe worden gelezen als “in”.

Dus

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

moet worden gelezen “Voor elke naam IN namen doen …”


Antwoord 4, autoriteit 8%

Hoe zou je deze voor-elke lus op een andere manier schrijven om de “:” niet op te nemen?

Ervan uitgaande dat listeen Collection-instantie is …

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

Ik zou het pedante punt moeten toevoegen dat :in deze context geen operator is. Een operator voert een bewerking uit in een expressie, en de dingen in de ( ... )in een for-instructie is geen expressie … volgens de JLS.


Antwoord 5

Het wordt gebruikt in for-lussen om een lijst met objecten te doorlopen.

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

Zie het als een for <item> in <list>in Python.


Antwoord 6

In uw specifieke geval,

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

this.listis een verzameling (lijst, ingesteld of array) en die code wijst ctoe aan elk element van de collectie.

Dus, als this.listeen verzameling {“2S”, “3H”, “4S”} is, zou de cardStringaan het einde deze tekenreeks zijn:

2S
3H
4S

Antwoord 7

U ziet het meestal in de ternaire toewijzingsoperator;

SYNTAX

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

Voorbeeld:

boolean isNegative = number > 0 ? false : true;

Wat is “equivalent” in de natuur aan de indien anders

if(number > 0){
    isNegative = false;
}
else{
    isNegative = true;
}

anders dan voorbeelden gegeven door verschillende posters,

U kunt ook gebruiken: om een ​​label aan te geven voor een blok die u kunt gebruiken in combinatie met doorgaan en breken ..

Bijvoorbeeld:

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

Antwoord 8

het wordt gebruikt in de nieuwe korte hand voor / lus

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

en de ternaire operator

list.isEmpty() ? true : false;

Antwoord 9

De dikke darm bestaat eigenlijk in combinatie met ?

int minVal = (a < b) ? a : b;

is gelijk aan:

int minval;
if(a < b){ minval = a;} 
else{ minval = b; }

Ook in de voor elke lus:

for(Node n : List l){ ... }

Letterlijk:

for(Node n = l.head; n.next != null; n = n.next)

Antwoord 10

Het drukt drie keer de snaar “iets” af.

JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};                   
for ( JLabel label : labels )                  
 {              
   label.setText("something");  
 panel.add(label);             
 }

Antwoord 11

Omdat de meeste voor lussen erg vergelijkbaar zijn, biedt Java een snelkoppeling om de
Bedrag van de code vereist om de lus te schrijven die de voor elke lus wordt genoemd.

Hier is een voorbeeld van de beknopte voor elke lus:

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

In het bovenstaande voorbeeld, kan de dikke darm (:) als “in” worden gelezen. De voor elke lus
Al met al kan worden gelezen als “voor elk integer-element (genaamd cijfer) in
quizgrades, print de waarde van de kwaliteit. “


Antwoord 12

Colon gebruikt in voor-elke lus,
Probeer dit voorbeeld,

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

Other episodes