По-видимому, двоеточие используется несколькими способами в 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);
Двоеточие на самом деле существует в сочетании с ?
int minVal = (a < b) ? a : b;
эквивалентно:
int minval;
if(a < b){ minval = a;}
else{ minval = b; }
Также в цикле for each:
for(Node n : List l){ ... }
буквально:
for(Node n = l.head; n.next != null; n = n.next)
Вы обычно видите это в операторе тернарного присваивания;
Пример синтаксиса
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;
}
}
}
Он используется в циклах for для итерации по списку объектов.
for (Object o: list)
{
// o is an element of list here
}
Думайте об этом как о for
в Python.
Он используется в новом сокращенном формате for / loop
final List<String> list = new ArrayList<String>();
for (final String s : list)
{
System.out.println(s);
}
и тернарном операторе
list.isEmpty() ? true : false;
Как бы вы написали этот для каждого цикла по-разному, чтобы не включать ":"?
Предполагая, что список
является экземпляром 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-each символ ":" можно прочитать как "in".
Поэтому
for (String name : names) {
// remainder omitted
}
следует читать "Для каждого имени IN names сделайте ..."
Там не является оператором «двоеточие», но двоеточие появляется в двух местах:
1: В тернарном операторе, например:
int x = bigInt ? 10000 : 50;
В этом случае тернарный оператор действует как «если» для выражений. Если bigInt истинно, то 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, и тернарный оператор используют двоеточие.
В вашем конкретном случае
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "\n";
}
this.list
- это коллекция (список, набор или массив), и этот код присваивает c
каждому элементу коллекции.
Так, если бы this.list
был коллекцией {"2S", "3H", "4S"}, то cardString
на конце был бы такой строкой:
2S
3H
4S