Rupanya titik dua digunakan dalam berbagai cara di Jawa. Adakah yang keberatan menjelaskan apa yang dilakukannya?
Misalnya di sini:
String cardString = "";
for (PlayingCard c : this.list) // <--
{
cardString += c + "\n";
}
Bagaimana Anda akan menulis for-each
loop ini dengan cara yang berbeda agar tidak menyertakan :
?
Jawaban:
Ada beberapa tempat titik dua digunakan dalam kode Java:
1) Label lompat ( Tutorial ):
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) Kondisi terner ( Tutorial ):
int a = (b < 4)? 7: 8; // if b < 4, set a to 7, else set a to 8
3) Untuk setiap loop ( Tutorial ):
String[] ss = {"hi", "there"} for (String s: ss) { print(s); // output "hi" , and "there" on the next iteration }
4) Pernyataan ( Panduan ):
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) Kasus dalam pernyataan switch ( Tutorial ):
switch (type) { case WHITESPACE: case RETURN: break; case NUMBER: print("got number: " + value); break; default: print("syntax error"); }
6) Referensi metode ( Tutorial )
class Person { public static int compareByAge(Person a, Person b) { return a.birthday.compareTo(b.birthday); }} } Arrays.sort(persons, Person::compareByAge);
sumber
assert
tidak "keluar dari program". Ini melemparAssertionError
. Ini hanya akan menyebabkan program keluar jika dilempar ke tumpukan dari satu-satunya utas non-daemon yang tersisa ... dan tidak tertangkap.Tidak ada operator "titik dua", tetapi titik dua muncul di dua tempat:
1: Di operator terner, mis:
int x = bigInt ? 10000 : 50;
Dalam hal ini, operator terner bertindak sebagai 'jika' untuk ekspresi. Jika bigInt benar, maka x akan mendapatkan 10000 yang ditugaskan padanya. Jika tidak, 50. Titik dua di sini berarti "lain".
2: Dalam untuk setiap loop:
double[] vals = new double[100]; //fill x with values for (double x : vals) { //do something with x }
Ini menetapkan x ke setiap nilai di 'vals' secara bergantian. Jadi jika vals berisi [10, 20.3, 30, ...], maka x akan menjadi 10 pada iterasi pertama, 20,3 pada iterasi kedua, dst.
Catatan: Saya katakan ini bukan operator karena ini hanya sintaks. Itu tidak dapat muncul dalam ekspresi tertentu dengan sendirinya, dan itu hanya kebetulan bahwa operator for-each dan terner menggunakan titik dua.
sumber
Sebagai tambahan, saat digunakan dalam for-each loop, ":" pada dasarnya dapat dibaca sebagai "in".
Begitu
for (String name : names) { // remainder omitted }
harus dibaca "Untuk setiap nama DI nama melakukan ..."
sumber
Dengan asumsi itu
list
adalahCollection
contoh ...public String toString() { String cardString = ""; for (Iterator<PlayingCard> it = this.list.iterator(); it.hasNext(); /**/) { PlayingCard c = it.next(); cardString = cardString + c + "\n"; } }
Saya harus menambahkan titik pedantic yang
:
bukan merupakan operator dalam konteks ini. Operator melakukan operasi dalam ekspresi, dan hal-hal di( ... )
dalamfor
pernyataan bukanlah ekspresi ... menurut JLS.sumber
list
adalah turunan dariCollection
; itu harus berupa contohIterable
jika dapat digunakan dalam loop for yang ditingkatkan, yang berarti ia akan memilikiiterator()
metode yang Anda panggil dalam jawaban Anda.Ini digunakan dalam for loop untuk mengulang daftar objek.
for (Object o: list) { // o is an element of list here }
Anggap saja sebagai dengan
for <item> in <list>
Python.sumber
Dalam kasus khusus Anda,
String cardString = ""; for (PlayingCard c : this.list) // <-- { cardString = cardString + c + "\n"; }
this.list
adalah koleksi (daftar, set, atau larik), dan kode tersebut menetapkanc
ke setiap elemen koleksi.Jadi, jika
this.list
sebuah koleksi {"2S", "3H", "4S"} makacardString
pada akhirnya adalah string ini:2S 3H 4S
sumber
Anda biasanya melihatnya di operator penugasan terner;
Sintaksis
variable = `condition ? result 1 : result 2;`
contoh:
boolean isNegative = number > 0 ? false : true;
yang "setara" di alam dengan if else
if(number > 0){ isNegative = false; } else{ isNegative = true; }
Selain contoh yang diberikan oleh poster yang berbeda,
Anda juga dapat menggunakan: untuk menandakan label untuk sebuah blok yang dapat Anda gunakan dalam hubungannya dengan lanjutkan dan putus ..
sebagai contoh:
public void someFunction(){ //an infinite loop goBackHere: { //label for(int i = 0; i < 10 ;i++){ if(i == 9 ) continue goBackHere; } } }
sumber
Ini akan mencetak string "sesuatu" tiga kali.
JLabel[] labels = {new JLabel(), new JLabel(), new JLabel()}; for ( JLabel label : labels ) { label.setText("something"); panel.add(label); }
sumber
Karena kebanyakan for loop sangat mirip, Java menyediakan jalan pintas untuk mengurangi jumlah kode yang diperlukan untuk menulis loop yang dipanggil untuk setiap loop.
Berikut adalah contoh ringkasan untuk setiap loop:
for (Integer grade : quizGrades){ System.out.println(grade); }
Pada contoh di atas, titik dua (:) bisa dibaca sebagai "dalam". Untuk setiap loop dapat dibaca sebagai "untuk setiap elemen Integer (disebut nilai) di quizGrades, cetak nilai grade."
sumber
Ini digunakan di tangan pendek baru untuk / loop
final List<String> list = new ArrayList<String>(); for (final String s : list) { System.out.println(s); }
dan operator terner
list.isEmpty() ? true : false;
sumber
Titik dua sebenarnya ada dalam hubungannya dengan
?
int minVal = (a < b) ? a : b;
setara dengan:
int minval; if(a < b){ minval = a;} else{ minval = b; }
Juga di untuk setiap loop:
for(Node n : List l){ ... }
secara harfiah:
for(Node n = l.head; n.next != null; n = n.next)
sumber
titik dua digunakan di untuk setiap pengulangan, Coba contoh ini,
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); } } }
sumber