Очевидно, двоеточие используется в Java по-разному. Не мог бы кто-нибудь объяснить, что он делает?
Например здесь:
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString += c + "\n";
}
Как бы вы написали этот for-each
цикл по-другому, чтобы не включать :
?
Ответы:
В 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) Случай в операторе switch ( Учебник ):
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);
источник
assert
не «выходит из программы». Выдает файлAssertionError
. Это приведет к завершению программы только в том случае, если она будет выброшена в стек единственного оставшегося недемонического потока ... и не поймана.Оператора "двоеточие" нет, но двоеточие встречается в двух местах:
1: В тернарном операторе, например:
int x = bigInt ? 10000 : 50;
В этом случае тернарный оператор действует как if для выражений. Если bigInt истинно, то x получит присвоенное ему значение 10000. Если нет, то 50. Двоеточие здесь означает «иначе».
2: В цикле для каждого:
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 }
следует читать "Для каждого имени IN имена делают ..."
источник
Предполагая, что
list
этоCollection
экземпляр ...public String toString() { String cardString = ""; for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) { PlayingCard c = it.next(); cardString = cardString + c + "\n"; } }
Я должен добавить педантичный момент, который
:
не является оператором в данном контексте. Оператор выполняет операцию в выражении, а содержимое внутри оператора( ... )
infor
не является выражением ... согласно JLS.источник
list
это экземплярCollection
; он должен быть экземпляром того, можноIterable
ли его использовать в расширенном цикле for, что означает, что он будет иметьiterator()
метод, который вы вызываете для него в своем ответе.Он используется в циклах 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». Для каждого цикла в целом можно прочитать как «для каждого элемента Integer (называемого оценкой) в quizGrades распечатайте значение оценки».
источник
Он используется в новом сокращении for / 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)
источник
двоеточие используется в каждом цикле, попробуйте этот пример,
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); } } }
источник