Java: что делает оператор двоеточия (:)?
Я бы сам посмотрел, но я даже не знаю, как это называется. Кто-нибудь может объяснить, что он делает?
Я не знал, что было несколько раз: появился. Что он делает в этом случае здесь:
public String toString() {
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "n";
}
Как бы вы это написали for-each
цикл по-другому, чтобы не включать":"?
12 ответов:
есть несколько мест двоеточие используется в Java-коде:
1) ярлык выпрыгивания (учебник):
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) троичное условие (учебник):
int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8
3) для каждого цикла (учебник):
String[] ss = {"hi", "there"} for (String s: ss) { print(s); // output "hi" , and "there" on the next iteration }
4) утверждение (руководство):
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) Case in switch statement (учебник):
switch (type) { case WHITESPACE: case RETURN: break; case NUMBER: print("got number: " + value); break; default: print("syntax error"); }
6) ссылки на методы (учебник)
class Person { public static int compareByAge(Person a, Person b) { return a.birthday.compareTo(b.birthday); }} } Arrays.sort(persons, Person::compareByAge);
нет оператора "двоеточие", но двоеточие появляется в двух местах:
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, и тернарный оператор используют двоеточие.
просто добавить, когда используется в цикле for-each,": "можно в основном читать как "in".
Так
for (String name : names) { // remainder omitted }
должно быть прочитано "для каждого имени в именах do ..."
как бы вы написали это для каждого цикла по-разному, чтобы не включать ":"?
предполагая, что
list
этоCollection
экземпляра ...public String toString() { String cardString = ""; for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) { PlayingCard c = it.next(); cardString = cardString + c + "\n"; } }
Я должен добавить педантичный смысл, что
:
не является оператором в этом контексте. Оператор выполняет операцию в выражении, а материал внутри( ... )
наfor
оператор не является выражением ... по данным JLS.
Он используется в циклах for для итерации по списку объектов.
for (Object o: list) { // o is an element of list here }
думайте об этом как
for <item> in <list>
в Python.
в вашем конкретном случае,
String cardString = ""; for (PlayingCard c : this.list) // <-- { cardString = cardString + c + "\n"; }
this.list
- это набор (список, набор или массив), и этот код назначаетc
к каждому элементу коллекции.Итак, если
this.list
были коллекции {"2S", "3H", "4S"} тогдаcardString
в конце будет эта строка:2S 3H 4S
вы обычно видите его в тернарном операторе присваивания;
синтаксис
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; } } }
он будет печатать строку "что-то" три раза.
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()}; for ( JLabel label : labels ) { label.setText("something"); panel.add(label); }
поскольку большинство циклов for очень похожи, Java предоставляет ярлык для уменьшения количество кода, необходимого для записи цикла, называемого для каждого цикла.
вот пример краткого для каждого цикла:
for (Integer grade : quizGrades){ System.out.println(grade); }
в приведенном выше примере двоеточие (:) может быть прочитано как "in". Для каждого цикла в целом можно прочитать как "для каждого целого элемента (называемого grade) в quizGrades, распечатайте значение класса."
Он используется в новой короткой руке для / loop
final List<String> list = new ArrayList<String>(); for (final String s : list) { System.out.println(s); }
и тернарный оператор
list.isEmpty() ? true : false;
двоеточие фактически существует в сочетании с
?
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)
двоеточие используется в цикле 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); } } }