web-dev-qa-db-ja.com

コロン(:)演算子は何をしますか?

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

例えばここに:

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

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

81
dukevin

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

「コロン」演算子はありませんが、コロンは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演算子と三項演算子の両方がコロンを使用する可能性があります。

34
Claudiu

追加するだけで、for-eachループで使用する場合、「:」は基本的に「in」と読むことができます。

そう

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

「各名前に対して、IN名は...」と読む必要があります。

17
helpermethod

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

listCollectionインスタンスであると仮定すると...

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
Stephen C

ほとんどのforループは非常によく似ているため、Javaは、for eachループと呼ばれるループを記述するために必要なコードの量を減らすためのショートカットを提供します。

各ループの簡潔な例を次に示します。

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

上記の例では、コロン(:)は「in」と読むことができます。 forループ全体は、「quizGradesの各整数要素(グレードと呼ばれる)に対して、グレードの値を出力する」と読むことができます。

1
Soft developer

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

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

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

1
Mike Cialowicz

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

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

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

 panel.add(label);             
 }
1
user3756229

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

構文

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
ultrajohn

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

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

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

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

2S
3H
4S

コロンはfor-eachループで使用されています。この例を試してください。

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

新しいショートハンドのfor/loopで使用されます

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

そして三項演算子

list.isEmpty() ? true : false;
0
user177800

コロンは?と一緒に実際に存在します

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)
0
Ritwik Bose