どうやら、コロンは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ステートメントの場合(チュートリアル):
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);
「コロン」演算子はありませんが、コロンは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演算子と三項演算子の両方がコロンを使用している可能性があります。
さらに、for-eachループで使用する場合、「:」は基本的に「in」と読み取ることができます。
それで
for (String name : names) {
// remainder omitted
}
「名前ごとに名前は...」と読む必要があります。
「:」を組み込まないように、この 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によると。
これは、オブジェクトのリストを反復処理するためにforループで使用されます。
for (Object o: list)
{
// o is an element of list here
}
for <item> in <list>
Pythonの場合と考えてください。
通常、三項代入演算子で表示されます。
構文
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;
}
}
}
あなたの特定のケースでは、
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "\n";
}
this.list
はコレクション (リスト、セット、または配列) であり、そのコードc
はコレクションの各要素に割り当てられます。
したがって、this.list
コレクションが {"2S", "3H", "4S"} の場合cardString
、末尾は次の文字列になります。
2S
3H
4S
これは、新しい短縮形for/loopで使用されます
final List<String> list = new ArrayList<String>();
for (final String s : list)
{
System.out.println(s);
}
と三項演算子
list.isEmpty() ? true : false;
コロンは実際には?
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)
文字列「something」を 3 回出力します。
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};
for ( JLabel label : labels )
{
label.setText("something");
panel.add(label);
}