Aparentemente, los dos puntos se utilizan de varias formas en Java. ¿A alguien le importaría explicar lo que hace?
Por ejemplo aquí:
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString += c + "\n";
}
¿Cómo escribirías este for-each
bucle de una manera diferente para no incorporar el :
?
Respuestas:
Hay varios lugares donde se usan los dos puntos en el código Java:
1) Etiqueta de salida ( 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) Condición ternaria ( Tutorial ):
int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8
3) Para cada bucle ( Tutorial ):
String[] ss = {"hi", "there"} for (String s: ss) { print(s); // output "hi" , and "there" on the next iteration }
4) Afirmación ( Guía ):
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) Caso en la declaración de cambio ( Tutorial ):
switch (type) { case WHITESPACE: case RETURN: break; case NUMBER: print("got number: " + value); break; default: print("syntax error"); }
6) Referencias de métodos ( Tutorial )
class Person { public static int compareByAge(Person a, Person b) { return a.birthday.compareTo(b.birthday); }} } Arrays.sort(persons, Person::compareByAge);
fuente
assert
no "sale del programa". Lanza unAssertionError
. Solo hará que el programa se cierre si se lanza a la pila del único subproceso que no es demonio restante ... y no se detecta.No hay un operador de "dos puntos", pero los dos puntos aparecen en dos lugares:
1: En el operador ternario, por ejemplo:
int x = bigInt ? 10000 : 50;
En este caso, el operador ternario actúa como un "si" para las expresiones. Si bigInt es verdadero, entonces x se le asignará 10000. Si no, 50. Los dos puntos aquí significan "más".
2: en un bucle para cada uno:
double[] vals = new double[100]; //fill x with values for (double x : vals) { //do something with x }
Esto establece xa cada uno de los valores en 'vals' a su vez. Entonces, si vals contiene [10, 20.3, 30, ...], entonces x será 10 en la primera iteración, 20.3 en la segunda, etc.
Nota: digo que no es un operador porque es solo sintaxis. No puede aparecer en ninguna expresión dada por sí solo, y es solo una casualidad que tanto el operador for-each como el ternario usen dos puntos.
fuente
Solo para agregar, cuando se usa en un bucle for-each, ":" básicamente se puede leer como "in".
Entonces
for (String name : names) { // remainder omitted }
debe leerse "Para cada nombre IN nombres hacer ..."
fuente
Suponiendo que
list
sea unaCollection
instancia ...public String toString() { String cardString = ""; for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) { PlayingCard c = it.next(); cardString = cardString + c + "\n"; } }
Debo agregar el punto pedante de que
:
no es un operador en este contexto. Un operador realiza una operación en una expresión, y lo que está dentro( ... )
de unafor
declaración no es una expresión ... de acuerdo con JLS.fuente
list
es una instancia deCollection
; debe ser una instancia deIterable
si se puede usar en el bucle for mejorado, lo que significa que tendrá eliterator()
método al que llama en su respuesta.Se usa en bucles for para iterar sobre una lista de objetos.
for (Object o: list) { // o is an element of list here }
Piense en ello como
for <item> in <list>
en Python.fuente
En tu caso específico,
String cardString = ""; for (PlayingCard c : this.list) // <-- { cardString = cardString + c + "\n"; }
this.list
es una colección (lista, conjunto o matriz), y ese código asignac
a cada elemento de la colección.Entonces, si
this.list
fuera una colección {"2S", "3H", "4S"},cardString
al final sería esta cadena:2S 3H 4S
fuente
Normalmente lo ve en el operador de asignación ternario;
Sintaxis
variable = `condition ? result 1 : result 2;`
ejemplo:
boolean isNegative = number > 0 ? false : true;
que es "equivalente" en naturaleza al if else
if(number > 0){ isNegative = false; } else{ isNegative = true; }
Aparte de los ejemplos dados por diferentes carteles,
también puede usar: para indicar una etiqueta para un bloque que puede usar junto con continuar y romper.
por ejemplo:
public void someFunction(){ //an infinite loop goBackHere: { //label for(int i = 0; i < 10 ;i++){ if(i == 9 ) continue goBackHere; } } }
fuente
Imprimirá la cadena "algo" tres veces.
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()}; for ( JLabel label : labels ) { label.setText("something"); panel.add(label); }
fuente
Dado que la mayoría de los bucles for son muy similares, Java proporciona un atajo para reducir la cantidad de código necesario para escribir el bucle denominado for cada bucle.
Aquí hay un ejemplo de lo conciso para cada ciclo:
for (Integer grade : quizGrades){ System.out.println(grade); }
En el ejemplo anterior, los dos puntos (:) se pueden leer como "en". El para cada ciclo en conjunto se puede leer como "para cada elemento entero (llamado grado) en quizGrades, imprima el valor de grado".
fuente
Se utiliza en la nueva mano corta para / loop
final List<String> list = new ArrayList<String>(); for (final String s : list) { System.out.println(s); }
y el operador ternario
list.isEmpty() ? true : false;
fuente
El colon existe en realidad junto con
?
int minVal = (a < b) ? a : b;
es equivalente a:
int minval; if(a < b){ minval = a;} else{ minval = b; }
También en el para cada bucle:
for(Node n : List l){ ... }
literalmente:
for(Node n = l.head; n.next != null; n = n.next)
fuente
dos puntos están usando para cada ciclo, pruebe este ejemplo,
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); } } }
fuente