96

どうやら、コロンはJavaで複数の方法で使用されています。誰かがそれが何をするのか説明してもらえますか?

たとえばここで:

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

for-eachを組み込まないように、このループを別の方法でどのように記述します:か?

4

12 に答える 12

205

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ステートメントの場合(チュートリアル):

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);
于 2010-03-08T06:16:16.773 に答える
34

「コロン」演算子はありませんが、コロンは2つの場所に表示されます。

1:三項演算子で、例:

int x = bigInt ? 10000 : 50;

この場合、三項演算子は式の「if」として機能します。bigIntがtrueの場合、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になり、2番目の反復で20.3になります。

注:これは単なる構文であるため、演算子ではないと言います。これは、それ自体では特定の式に表示できません。また、for-each演算子と三項演算子の両方がコロンを使用している可能性があります。

于 2010-03-08T06:12:07.313 に答える
21

さらに、for-eachループで使用する場合、「:」は基本的に「in」と読み取ることができます。

それで

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

「名前ごとに名前は...」と読む必要があります。

于 2010-03-08T08:28:54.717 に答える
16

「:」を組み込まないように、この for-each ループを別の方法でどのように記述しますか?

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によると。

于 2010-03-08T07:27:36.660 に答える
1

これは、オブジェクトのリストを反復処理するためにforループで使用されます。

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

for <item> in <list>Pythonの場合と考えてください。

于 2010-03-08T06:12:26.280 に答える
1

通常、三項代入演算子で表示されます。

構文

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

例:

boolean isNegative = number > 0 ? false : true;

これは、本質的にifelseと「同等」です。

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;
          }
     }
}
于 2010-03-08T06:18:12.560 に答える
1

あなたの特定のケースでは、

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

this.listはコレクション (リスト、セット、または配列) であり、そのコードcはコレクションの各要素に割り当てられます。

したがって、this.listコレクションが {"2S", "3H", "4S"} の場合cardString、末尾は次の文字列になります。

2S
3H
4S
于 2010-03-08T06:24:55.083 に答える
0

これは、新しい短縮形for/loopで使用されます

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

と三項演算子

list.isEmpty() ? true : false;
于 2010-03-08T06:12:01.040 に答える
0

コロンは実際には?

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)
于 2010-03-08T06:12:39.073 に答える
0

文字列「something」を 3 回出力します。

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

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

 panel.add(label);             
 }
于 2014-07-25T09:30:20.573 に答える