どうやら、コロンは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);
assert
しても「プログラムを終了」しません。をスローしAssertionError
ます。残っている唯一の非デーモンスレッドのスタックにスローされ、キャッチされない場合にのみ、プログラムが終了します。
「コロン」演算子はありませんが、コロンは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
}
「名前ごとにIN名は...」と読む必要があります。
「:」を組み込まないように、この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";
}
}
:
このコンテキストでは、演算子ではないペダンティックポイントを追加する必要があります。JLSによると、演算子は式で演算を実行( ... )
し、for
ステートメント内の内容は式ではありません...。
list
がCollection
;のインスタンスであると想定する必要はありません。これIterable
は、拡張forループで使用できるかどうかのインスタンスである必要があります。つまりiterator()
、回答で呼び出すメソッドが含まれます。
これは、オブジェクトのリストを反復処理するためにforループで使用されます。
for (Object o: list)
{
// o is an element of list here
}
for <item> in <list>
Pythonの場合と考えてください。
あなたの特定のケースでは、
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString = cardString + c + "\n";
}
this.list
はコレクション(リスト、セット、または配列)であり、そのコードc
はコレクションの各要素に割り当てられます。
したがって、this.list
コレクション{"2S"、 "3H"、 "4S"}の場合cardString
、最後は次の文字列になります。
2S
3H
4S
通常、これは3値代入演算子で表示されます。
構文
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;
}
}
}
文字列「something」を3回出力します。
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};
for ( JLabel label : labels )
{
label.setText("something");
panel.add(label);
}
これは、新しい短縮形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)
コロンは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);
}
}
}