JavaRush /Blog Jawa /Random-JV /Ngalih statement ing Jawa

Ngalih statement ing Jawa

Diterbitake ing grup
Bayangake yen sampeyan lagi ngadeg ing garpu, kaya pahlawan saka lukisan sing misuwur. Yen maring kiwa bakal kelangan jaran, yen manengen bakal entuk kawruh. Carane program kahanan kuwi? Sampeyan bisa uga wis ngerti manawa kita nggawe pilihan kasebut nggunakake konstruksi yen-banjur lan yen-banjur-liyane .
if (turn_left) {
    System.out.println(«Коня потеряешь»);
}
if (turn_right) {
    System.out.println(“Знания обретёшь”);
}
else
    System.out.println(“Так и будешь стоять?);
Apa yen ora ana loro trek kasebut, nanging 10? Apa ana dalan "tengen", "sethithik ngiwa", "sethithik ngiwa" lan sateruse, kanthi jumlah 10 lembar? Bayangake carane kode if-then-else sampeyan bakal tuwuh ing versi iki!
if (вариант1)
{}
else if (вариант2)
{}else if (вариантN).
Dadi, sampeyan ora duwe garpu kahanan, nanging sawetara, ujare, 10 (sing penting ing kene yaiku jumlah garpu diwatesi). Kanggo kahanan kaya mengkono, ana operator pilihan khusus - switch case java .
switch (ВыражениеДляВыбора) {
           case  (Значение1):
               Код1;
               break;
           case (Значение2):
               Код2;
               break;
...
           case (ЗначениеN):
               КодN;
               break;
           default:
               КодВыбораПоУмолчанию;
               break;
       }
Urutan eksekusi ing statement kasebut yaiku:
  • SelectionExpression dievaluasi. Sabanjure, statement switch mbandhingake ekspresi sing diasilake karo Nilai sabanjure (ing urutan sing kadhaptar).
  • Yen SelectExpression cocog karo Nilai, banjur kode ing ngisor titik loro dieksekusi.
  • Yen mbangun break ketemu , banjur kontrol ditransfer njaba printah switch.
  • Yen ora ana sing cocog antarane ExpressionForSelection lan Values ​​ditemokake, kontrol ditransfer menyang DefaultSelectionCode.
Titik penting
  • Tipe SelectionExpression kanggo statement pilihan switch ing Jawa kudu salah siji saka ing ngisor iki:

    • byte , singkat , char , int .
    • Bungkuse yaiku Byte , Short , Character , Integer .
    • String (wiwit Jawa 7).
    • Enumerasi ( Enum ).
  • Blok standar iku opsional, banjur yen SelectionExpression lan Values ​​ora cocog, ora ana tindakan sing bakal ditindakake.
  • break iku opsional; yen ora ana, kode bakal terus dieksekusi (nglirwakake mbandhingake luwih akeh nilai ing pamblokiran cilik) nganti breakstatement switch pisanan ditemoni utawa nganti pungkasan.
  • yen perlu nglakokake kode sing padha kanggo sawetara opsi pilihan, supaya ora duplikasi, kita nuduhake sawetara nilai sing cocog ing ngarepe ing blok-blok cilik sing berturut-turut .

Ayo diterusake ing praktik nggunakake statement switch ing basa Jawa

Aja kuwatir, kita wis rampung karo teori, lan sawise conto luwih kabeh bakal dadi luwih cetha. Dadi ayo miwiti. Ayo ndeleng conto astronomi babagan planet-planet ing tata surya. Sesuai karo peraturan internasional paling anyar, kita bakal ngilangi Pluto (amarga sifat orbite). Ayo kita elinga yen planet kita dumunung saka Srengéngé ing urutan ing ngisor iki: Mercury, Venus, Bumi, Mars, Jupiter, Saturnus, Uranus lan Neptunus. Ayo nggawe cara Jawa sing nampa minangka input nomer seri planet (relatif kanggo jarak saka Srengéngé), lan minangka output menehi komposisi utama atmosfer planet iki ing wangun List <String> . Ayo kula ngelingake yen sawetara planet duwe komposisi atmosfer sing padha. Mangkono, Venus lan Mars ngemot utamane karbon dioksida, Jupiter lan Saturnus kalebu hidrogen lan helium, lan Uranus lan Neptunus, saliyane pasangan gas pungkasan, uga duwe metana. Fungsi kita:
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No Atmosphere");
            break;
        case 2:
        case 4: result.add("Carbon dioxide");
            break;
        case 3: result.add("Carbon dioxide");
            result.add("Nitrogen");
            result.add("Oxygen");
            break;
        case 5:
        case 6: result.add("Hydrogen");
            result.add("Helium");
            break;
        case 7:
        case 8: result.add("Methane");
            result.add("Hydrogen");
            result.add("Helium");
            break;
        default:
            break;
    }
    return result;
}
Wigati dicathet: kita mbandhingake kode sing padha karo planet kanthi komposisi atmosfer sing padha. Lan kita nindakake iki kanthi nggunakake konstruksi cilik sing berturut-turut . Dadi, yen kita pengin entuk komposisi atmosfer planet asal kita, kita nelpon metode kita kanthi parameter 3:
getPlanetAtmosphere(3).
System.out.println(getPlanetAtmosphere(3)) вернет нам [Углекислый газ, Азот, Кислород].
Eksperimen karo break Apa sing kedadeyan yen kita mbusak kabeh statement break ? Ayo nyoba ing praktik:
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No Atmosphere");
        case 2:
        case 4: result.add("Carbon dioxide");
        case 3: result.add("Carbon dioxide");
            result.add("Nitrogen");
            result.add("Oxygen");
        case 5:
        case 6: result.add("Hydrogen");
            result.add("Helium");
        case 7:
        case 8: result.add("Methane");
            result.add("Hydrogen");
            result.add("Helium");
        default:
    }
    return result;
}
Yen kita nyithak asil saka metode kasebut System.out.println(getPlanetAtmosphere(3)), planet asal kita ora bakal cocog kanggo urip. Utawa cocok? Hakim dhewe: [Karbon dioksida, Nitrogen, Oksigen, Hidrogen, Helium, Metana, Hidrogen, Helium], Napa kedadeyan iki? Program kasebut nglakokake kabeh kasus sawise pertandhingan pisanan lan nganti pungkasan blok switch.

Optimization break banget

Elinga yen kita bisa ngapikake cara kanthi susunan sing beda saka arahan break lan pilihan pilihan
public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No Atmosphere");
                break;
        case 3: result.add("Nitrogen");
                result.add("Oxygen");
        case 2:
        case 4: result.add("Carbon dioxide");
                break;
        case 7:
        case 8: result.add("Methane");
        case 5:
        case 6: result.add("Hydrogen");
                result.add("Helium");
    }
     return result;
}
Katon luwih cendhek, ta? We suda jumlah statements dening muter karo urutan cilik lan regrouping. Saiki saben jinis gas ditambahake menyang dhaptar mung siji baris kode. Dhaptar conto pungkasan cara ditampilake mung kanggo nduduhake karya kasebut, ora dianjurake kanggo nulis kanthi gaya kasebut. Yen penulis (lan luwih akeh programer pihak katelu) kode sing padha kudu njaga, mula bakal angel banget kanggo mulihake logika kanggo pambentukan blok pilihan lan kode eksekusi kanggo statement switch java.

Bedane saka yen

Nalika statement yen lan ngalih padha ing katon , aja lali sing operator pilihan macem-macem ngalih basis pilihan saka opsi eksekusi ing NILAI KHUSUS, déné ing yen. bisa dadi ekspresi logis. Coba kasunyatan iki nalika ngrancang kode sampeyan. Ayo goleki luwih cedhak babagan inovasi kanggo ngalih ing macem-macem versi Jawa.

Ngalih ing Jawa 7

Sadurunge Java 7, byte, short, char lan int primitif bisa digunakake minangka nilai kanggo switch. Ana uga dhukungan kanggo enum lan pambungkus saka jinis primitif sing kadhaptar ing ndhuwur: Karakter, Byte, Short, lan Integer. Nanging asring kita kudu golek Nilai saka string ngalih java! Iki bakal katon kaya ing Jawa 6:
DayOfWeek day = DayOfWeek.fromValue("Thursday");

switch (day) {
  case MONDAY:
     System.out.println("Today is windy !");
     break;
  case THURSDAY:
     System.out.println("Today is sunny !");
     break;
  case WEDNESDAY:
     System.out.println("Today is rainy!");
     break;
  default:
     System.out.println("Oooops, something wrong !");
Lan enum:
public enum DayOfWeek {
  MONDAY("Monday"),
  THURSDAY("Thursday"),
  WEDNESDAY("Wednesday"),
  NOT_FOUND("Not found");

  private final String value;

  DayOfWeek(final String value) {
     this.value = value;
  }

  public static DayOfWeek fromValue(String value) {
     for (final DayOfWeek dayOfWeek : values()) {
        if (dayOfWeek.value.equalsIgnoreCase(value)) {
           return dayOfWeek;
        }
     }
     return NOT_FOUND;
  }
}
Nanging wiwit karo Java 7, sampeyan bisa nggunakake jinis String minangka nilai kanggo saklar:
String day = "Thursday";

switch (day) {
  case "Monday":
     System.out.println("Today is windy !");
     break;
  case "Thursday":
     System.out.println("Today is sunny !");
     break;
  case "Wednesday":
     System.out.println("Today is rainy!");
     break;
  default:
     System.out.println("Oooops, something wrong !");
}
Senadyan fitur-fitur anyar, pendekatan nggunakake enum luwih fleksibel lan dianjurake kanggo nggunakake: kita bisa nggunakake maneh enum iki kaping pirang-pirang.

Ngalih ing Jawa 12

Java 12 wis nambah ekspresi Switch kanggo cocog pola. Yen kita nggunakake Switch kaya ing conto ing ndhuwur, kanggo nyetel nilai sawetara variabel, kita kudu ngetung nilai kasebut lan nemtokake menyang variabel sing diwenehake, banjur gunakake break:
int count = 2;
int value;
switch (count) {
  case 1:
     value = 12;
     break;
  case 2:
     value = 32;
     break;
  case 3:
     value = 52;
     break;
  default:
     value = 0;
}
Nanging amarga kemampuan Java 12, kita bisa nulis maneh ekspresi kasebut kaya ing ngisor iki:
int value = switch (count) {
  case 1:
     break 12;
  case 2:
     break 32;
  case 3:
     break 52;
  default:
     break 0;
};
Ayo goleki owah-owahan sethithik:
  1. Yen sadurunge kita nyetel nilai variabel ing pamblokiran cilik, amarga statement switch dhewe ora bisa ngasilake apa-apa, saiki kita duwe kesempatan kasebut, lan kita langsung ngasilake nilai kasebut kanthi nggunakake switch.

  2. Sadurunge, kita bisa maneh duwe apa-apa ing sisih tengen break, nanging saiki digunakake minangka statement bali kanggo bali ing Nilai saka ngalih. Tanda titik titik tandha titik mlebu menyang blok statement. Yaiku, saka titik kasebut eksekusi kabeh kode ing ngisor iki diwiwiti, sanajan label liyane ditemoni.

    Asil kasebut minangka transisi pungkasan saka tandha menyang tandha, sing uga disebut tiba -liwat.

Ngalih statement ing Jawa - 2Kanggo ngrampungake pass kasebut, sampeyan kudu ngliwati kabeh unsur kanthi lengkap, utawa nggunakake break utawa bali. Inovasi ing java 12 menehi kita kemampuan kanggo nggunakake operator lambda, kang siji mesthekake yen mung kode ing sisih tengen bakal kaleksanan. Tanpa "gagal". Kaya apa conto sadurunge ing kasus iki:
int count = 2;
int value = switch (count) {
  case 1 -> 12;
  case 2 -> 32;
  case 3 -> 52;
  default -> 0;
};
Kode wis dadi luwih prasaja, apa ora? Lan siji liyane: operator lambda uga bisa dadi analog khas saka titik loro, sawise iku ana blok kabeh karo sawetara operasi:
int count = 2;
int value = switch (count) {
  case 1 -> {
     //some computational operations...
     break 12;
  }
  case 2 -> {
     //some computational operations...
     break 32;
  }
  case 3 -> {
     //some computational operations...
     break 52;
  }
  default -> {
     //some computational operations...
     break 0;
  }
};
Inggih, yen ing sawetara kasus, nilai bali padha? Pranyata metu sing kita bener duwe kasus sing padha kanggo sawetara nilai beda. Mangkene carane bisa disingkat nggunakake fitur anyar ing Java 12:
int count = 2;
int value = switch (count) {
  case 1, 3, 5 -> 12;
  case 2, 4, 6 -> 52;
  default -> 0;
};

Ngalih ing Jawa 13

Ing Jawa 13, cara switch ngasilake nilai wis diganti. Yen ing java 12 kita nulis nilai bali sawise break, kang dadi bali kanggo kita kanggo pamblokiran switch, saiki kita bakal bali Nilai nggunakake tembung ngasilaken . Ayo katon:
int value = switch (count) {
  case 1:
     yield 12;
  case 2:
     yield 32;
  case 3:
     yield 52;
  default:
     yield 0;
};
Ing wektu sing padha, kode sing ditulis ing java 12 nggunakake break to return ora bakal dikompilasi (( Ngalih statement ing Jawa - 3Break bakal digunakake, nanging ing kahanan sing ora perlu ngasilake apa-apa.

Total

  • Gunakake statement kasus yen ana luwih saka rong cabang supaya ora ngganggu kode sampeyan karo struktur yen.
  • Aja lali mungkasi blok logis saben cabang sing cocog karo nilai tartamtu (blok cilik) kanthi panggilan break .
  • Saliyane sawetara jinis primitif, statement switch uga bisa nggunakake jinis Enum lan String minangka ekspresi .
  • Elinga blok standar - gunakake kanggo nangani nilai pilihan sing ora direncanakake.
  • Kanggo ngoptimalake kinerja, mindhah cabang kode kanthi pilihan sing paling umum ing wiwitan blok switch.
  • Aja kesusu karo "optimasi" kanthi ngilangi istirahat ing mburi blok pilihan kasus - kode kasebut angel dingerteni, lan, minangka asil, angel dijaga sajrone pangembangane.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION