Подтвердить что ты не робот

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

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

Я не знал, что было несколько раз: появилось. Что здесь делается в этом случае:

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

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

4b9b3361

Ответ 1

В коде Java используется несколько мест, в которых используется двоеточие:

1) Выпадающая метка (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) Тернарное условие (Tutorial):

int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8

3) Для каждого цикла (Tutorial):

String[] ss = {"hi", "there"}
for (String s: ss) {
    print(s); // output "hi" , and "there" on the next iteration
}

4) Утверждение (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) Случай в инструкции switch (Tutorial):

switch (type) {
    case WHITESPACE:
    case RETURN:
        break;
    case NUMBER:
        print("got number: " + value);
        break;
    default:
        print("syntax error");
}

6) Ссылки на методы (Tutorial)

class Person {
   public static int compareByAge(Person a, Person b) {
       return a.birthday.compareTo(b.birthday);
   }}
}

Arrays.sort(persons, Person::compareByAge);

Ответ 2

Нет оператора "двоеточие", но двоеточие отображается в двух местах:

1: В тернарном операторе, например:

int x = bigInt ? 10000 : 50;

В этом случае тернарный оператор действует как выражение "if" для выражений. Если bigInt истинно, тогда x получит 10000, назначенных ему. Если нет, 50. Двоеточие здесь означает "else".

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 на второй и т.д.

Примечание. Я говорю, что это не оператор, потому что это просто синтаксис. Он не может появляться в каком-либо конкретном выражении сам по себе, и это просто шанс, что и для каждого, и для троичного оператора используется двоеточие.

Ответ 3

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

Итак,

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

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

Ответ 4

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

Предполагая, что 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.

Ответ 5

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

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

Подумайте об этом как for <item> in <list> в Python.

Ответ 6

Обычно вы видите его в тройном операторе присваивания;

Синтаксис

variable =  `condition ? result 1 : result 2;`

Пример:

boolean isNegative = number > 0 ? false : true;

который является "эквивалентным" по своей природе для if else

if(number > 0){
    isNegative = false;
}
else{
    isNegative = true;
}

Кроме примеров, данных разными плакатами,

вы также можете использовать: для обозначения метки для блока, которую вы можете использовать в сочетании с продолжением и разрывом.

например:

public void someFunction(){
     //an infinite loop
     goBackHere: { //label
          for(int i = 0; i < 10 ;i++){
               if(i == 9 ) continue goBackHere;
          }
     }
}

Ответ 7

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

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

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

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

2S
3H
4S

Ответ 8

Он будет печатать строку "что-то" три раза.

JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};                   

for ( JLabel label : labels )                  
 {              
   label.setText("something");  

 panel.add(label);             
 }

Ответ 9

Так как большинство для циклов очень похожи, Java предоставляет ярлык для сокращения  количество кода, необходимое для записи цикла, называемого для каждого цикла.

Ниже приведен пример краткости для каждого цикла:

for (Integer grade : quizGrades){
      System.out.println(grade);
 }    

В приведенном выше примере двоеточие (:) можно читать как "в". Для каждого цикла  вообще можно прочитать как "для каждого элемента Integer (называемого классом) в  quizGrades, распечатайте значение класса."

Ответ 10

Используется в новой короткой руке для /loop

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

и тернарный оператор

list.isEmpty() ? true : false;

Ответ 11

Двоеточие фактически существует в сочетании с ?

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)

Ответ 12

двоеточие используется для каждого цикла, Попробуйте этот пример,

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);
                   }
       }
}