Что делает двоеточие (оператор :) делают?

По-видимому, двоеточие используется несколькими способами в Java. Кто-либо возражал бы объяснять, что это делает?

Например, здесь:

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString += c + "\n";
}

Как Вы записали бы это for-each циклично выполните другой путь, чтобы не соединиться :?

82
задан Ivar 11 November 2018 в 19:27
поделиться

9 ответов

В 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);
182
ответ дан 24 November 2019 в 09:02
поделиться

Двоеточие на самом деле существует в сочетании с ?

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)
0
ответ дан 24 November 2019 в 09:02
поделиться

Вы обычно видите это в операторе тернарного присваивания;

Пример синтаксиса

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;
          }
     }
}
1
ответ дан 24 November 2019 в 09:02
поделиться

Он используется в циклах for для итерации по списку объектов.

for (Object o: list)
{
    // o is an element of list here
}

Думайте об этом как о for in в Python.

1
ответ дан 24 November 2019 в 09:02
поделиться

Он используется в новом сокращенном формате for / loop

final List<String> list = new ArrayList<String>();
for (final String s : list)
{
   System.out.println(s);
}

и тернарном операторе

list.isEmpty() ? true : false;
0
ответ дан 24 November 2019 в 09:02
поделиться

Как бы вы написали этот для каждого цикла по-разному, чтобы не включать ":"?

Предполагая, что список является экземпляром 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.

15
ответ дан 24 November 2019 в 09:02
поделиться

Хочу добавить, что при использовании в цикле for-each символ ":" можно прочитать как "in".

Поэтому

for (String name : names) {
    // remainder omitted
}

следует читать "Для каждого имени IN names сделайте ..."

18
ответ дан 24 November 2019 в 09:02
поделиться

Там не является оператором «двоеточие», но двоеточие появляется в двух местах:

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, и тернарный оператор используют двоеточие.

34
ответ дан 24 November 2019 в 09:02
поделиться

В вашем конкретном случае

String cardString = "";
for (PlayingCard c : this.list)  // <--
{
    cardString = cardString + c + "\n";
}

this.list - это коллекция (список, набор или массив), и этот код присваивает c каждому элементу коллекции.

Так, если бы this.list был коллекцией {"2S", "3H", "4S"}, то cardString на конце был бы такой строкой:

2S
3H
4S
1
ответ дан 24 November 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: