example - foreach java oracle
Java: ¿Qué hace el operador de dos puntos(:)? (12)
¿Cómo escribirías esto para cada bucle de una manera diferente para no incorporar el ":"?
Suponiendo que esa list
es una instancia de Collection
...
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 que :
no es un operador en este contexto. Un operador realiza una operación en una expresión, y el material dentro de ( ... )
en una declaración for
no es una expresión ... según el JLS.
Lo buscaría yo mismo, pero ni siquiera sé cómo se llama. ¿Alguien le importaría explicar lo que hace?
No sabía que había muchas veces el: apareció. ¿Qué hace en este caso aquí?
public String toString() {
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "/n";
}
¿Cómo escribirías esto for-each
bucle de una manera diferente para no incorporar el ":"?
¿El colon realmente existe 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 ciclo:
for(Node n : List l){ ... }
literalmente:
for(Node n = l.head; n.next != null; n = n.next)
Como la mayoría de los bucles for son muy similares, Java proporciona un atajo para reducir la cantidad de código requerido para escribir el bucle llamado para 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 se puede leer como "para cada elemento entero (llamado grado) en cuestionarios, imprima el valor de grado".
En tu caso específico,
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "/n";
}
this.list
es una colección (list, set o array), y ese código asigna c
a cada elemento de la colección.
Entonces, si this.list
fuera una colección {"2S", "3H", "4S"} entonces la cardString
en el extremo sería esta cadena:
2S
3H
4S
Hay varios lugares donde se usa colon en el código de Java:
1) Etiqueta de salto ( 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) For-each loop ( Tutorial ):
String[] ss = {"hi", "there"}
for (String s: ss) {
print(s); // output "hi" , and "there" on the next iteration
}
4) Afirmación ( 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) Caso en 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);
Imprimirá la cadena "algo" tres veces.
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};
for ( JLabel label : labels )
{
label.setText("something");
panel.add(label);
}
No hay un operador de "dos puntos", pero el dos puntos aparece 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 tendrá 10000 asignados a él. Si no, 50. Los dos puntos aquí significan "else".
2: en un bucle for-each:
double[] vals = new double[100];
//fill x with values
for (double x : vals) {
//do something with x
}
Esto establece x a 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 una expresión dada por sí mismo, y es solo una casualidad que tanto el operador for-each como el operador ternario usen dos puntos.
Se usa en ciclos for para iterar sobre una lista de objetos.
for (Object o: list)
{
// o is an element of list here
}
Piénselo como un for <item> in <list>
en Python.
Se usa 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;
Solo para agregar, cuando se usa en un bucle for-each, el ":" puede leerse básicamente como "in".
Asi que
for (String name : names) {
// remainder omitted
}
debe leerse "Para cada nombre EN nombres ..."
Usualmente lo ves en el operador de asignación ternaria;
Sintaxis
variable = `condition ? result 1 : result 2;`
ejemplo:
boolean isNegative = number > 0 ? false : true;
que es de naturaleza "equivalente" al if else
if(number > 0){
isNegative = false;
}
else{
isNegative = true;
}
Aparte de 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;
}
}
}
dos puntos está utilizando en cada bucle, 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);
}
}
}