[java] 콜론 (:) 연산자는 무엇을합니까?

분명히 콜론은 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) For-each 루프 ( 튜토리얼 ) :

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 문의 사례 ( 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);


답변

“콜론”연산자는 없지만 콜론은 두 위치에 나타납니다.

1 : 삼항 연산자에서, 예 :

int x = bigInt ? 10000 : 50;

이 경우 삼항 연산자는 표현식의 ‘if’역할을합니다. bigInt가 참이면 x는 10000이 할당됩니다. 그렇지 않다면, 50. 여기서 콜론은 “else”를 의미합니다.

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
}

“각 이름 IN 이름에 대해 …”로 읽어야합니다.


답변

“:”를 통합하지 않도록이 for-each 루프를 다른 방식으로 작성하는 방법은 무엇입니까?

그 가정하면 listA는 Collection예 …

public String toString() {
   String cardString = "";
   for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) {
      PlayingCard c = it.next();
      cardString = cardString + c + "\n";
   }
}

:이 맥락에서 연산자가 아닌 현명한 점을 추가해야합니다 . 연산자는 표현식에서 작업을 수행 하고 JLS에 따르면 명령문 ( ... )for내용은 표현식이 아닙니다.


답변

for 루프에서 객체 목록을 반복하는 데 사용됩니다.

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

for <item> in <list>파이썬 으로 생각하십시오 .


답변

특정 경우에는

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

다른 포스터에서 제시 한 예 외에

또한 :를 사용하여 계속 및 중단과 함께 사용할 수있는 블록의 레이블을 나타낼 수 있습니다.

예를 들면 :

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