どうやら、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);
「コロン」演算子はありませんが、コロンは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";
}
}
このコンテキストでは、:
は演算子ではないという点を追加する必要があります。演算子は式で操作を実行しますが、for
ステートメントの( ... )
内のものは、JLSによると式...ではありません。
ほとんどのforループは非常によく似ているため、Javaは、for eachループと呼ばれるループを記述するために必要なコードの量を減らすためのショートカットを提供します。
各ループの簡潔な例を次に示します。
for (Integer grade : quizGrades){
System.out.println(grade);
}
上記の例では、コロン(:)は「in」と読むことができます。 forループ全体は、「quizGradesの各整数要素(グレードと呼ばれる)に対して、グレードの値を出力する」と読むことができます。
Forループでオブジェクトのリストを反復処理するために使用されます。
for (Object o: list)
{
// o is an element of list here
}
Pythonのfor <item> in <list>
と考えてください。
文字列「something」を3回出力します。
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()};
for ( JLabel label : labels )
{
label.setText("something");
panel.add(label);
}
通常、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;
}
}
}
あなたの特定のケースでは、
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);
}
}
}
新しいショートハンドの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(Node n : List l){ ... }
文字通り:
for(Node n = l.head; n.next != null; n = n.next)