คำถามติดแท็ก switch-statement

ในการเขียนโปรแกรมคอมพิวเตอร์คำสั่ง switch, case, select หรือ inspect เป็นชนิดของกลไกการควบคุมการเลือกที่ใช้เพื่อเรียกใช้บล็อกเฉพาะของรหัสตามเนื้อหาตัวแปร

10
แนวคิดการจับคู่สวิตช์ / รูปแบบ
ฉันได้ดู F # เมื่อเร็ว ๆ นี้และในขณะที่ฉันไม่ได้กระโดดข้ามรั้วในไม่ช้ามันก็ไฮไลท์บางพื้นที่ที่ C # (หรือการสนับสนุนห้องสมุด) จะทำให้ชีวิตง่ายขึ้น โดยเฉพาะอย่างยิ่งฉันกำลังคิดเกี่ยวกับความสามารถในการจับคู่รูปแบบของ F # ซึ่งอนุญาตให้ใช้ไวยากรณ์ที่หลากหลายมากซึ่งแสดงออกได้ดีกว่าสวิตช์ C / เงื่อนไขที่เทียบเท่าในปัจจุบัน ฉันจะไม่พยายามยกตัวอย่างโดยตรง (F # ของฉันไม่ได้ขึ้นอยู่กับมัน) แต่ในระยะสั้นจะช่วยให้: จับคู่ตามประเภท (พร้อมการตรวจสอบที่ครอบคลุมอย่างสมบูรณ์สำหรับสหภาพที่มีการแบ่งแยก) [หมายเหตุสิ่งนี้ยังทำให้ประเภทของตัวแปรที่ถูกผูกไว้ให้การเข้าถึงสมาชิก ฯลฯ ] จับคู่โดยภาคแสดง การรวมกันของด้านบน (และอาจเป็นไปได้ว่าบางสถานการณ์อื่น ๆ ที่ฉันไม่ทราบ) ในขณะที่มันน่ารักสำหรับ C # ในที่สุดก็ยืม [ahem] ความร่ำรวยบางอย่างในระหว่างนี้ฉันได้ดูสิ่งที่สามารถทำได้ในรันไทม์ - ตัวอย่างเช่นมันค่อนข้างง่ายที่จะรวมวัตถุบางอย่างเข้าด้วยกัน: var getRentPrice = new Switch<Vehicle, int>() .Case<Motorcycle>(bike => 100 + …

12
SQL Switch / Case ในอนุประโยค 'where'
ฉันพยายามค้นหารอบ ๆ แต่ไม่พบสิ่งที่จะช่วยฉันได้ ฉันกำลังพยายามทำสิ่งนี้ใน SQL: declare @locationType varchar(50); declare @locationID int; SELECT column1, column2 FROM viewWhatever WHERE CASE @locationType WHEN 'location' THEN account_location = @locationID WHEN 'area' THEN xxx_location_area = @locationID WHEN 'division' THEN xxx_location_division = @locationID ฉันรู้ว่าฉันไม่ควรใส่ '= @locationID' ต่อท้ายแต่ละอัน แต่ฉันไม่สามารถรับไวยากรณ์ได้ใกล้เคียงกับความถูกต้อง SQL ยังคงบ่นเกี่ยวกับ '=' ของฉันในบรรทัดแรกเมื่อ ... ฉันจะทำเช่นนี้ได้อย่างไร?

5
กรณีที่รวดเร็วล้มลง
สวิฟท์มีคำแถลงหรือไม่ เช่นถ้าฉันทำสิ่งต่อไปนี้ var testVar = "hello" var result = 0 switch(testVal) { case "one": result = 1 case "two": result = 1 default: result = 3 } เป็นไปได้หรือไม่ที่จะใช้รหัสเดียวกันสำหรับกรณี "หนึ่ง" และกรณี "สอง"


6
ใน Go คำสั่ง break แบ่งจากสวิตช์ / เลือกหรือไม่
ฉันรู้ว่าswitch/ selectstatement แบ่งโดยอัตโนมัติหลังจากทุกกรณี ฉันสงสัยในรหัสต่อไปนี้: for { switch sometest() { case 0: dosomething() case 1: break default: dosomethingelse() } } ที่ไม่breakคำสั่งออกจากforห่วงหรือเพียงแค่switchบล็อก?

17
ข้อ จำกัด คำสั่งสวิตช์ C # - เพราะเหตุใด
เมื่อเขียนคำสั่ง switch ดูเหมือนจะมีข้อ จำกัด สองประการเกี่ยวกับสิ่งที่คุณสามารถเปิดได้ในคำสั่ง case ตัวอย่างเช่น (และใช่ฉันรู้ว่าถ้าคุณกำลังทำสิ่งนี้มันอาจหมายถึงสถาปัตยกรรมเชิงวัตถุ (OO) ของคุณคือไม่แน่นอน - นี่เป็นเพียงตัวอย่างที่ได้วางแผนไว้!), Type t = typeof(int); switch (t) { case typeof(int): Console.WriteLine("int!"); break; case typeof(string): Console.WriteLine("string!"); break; default: Console.WriteLine("unknown!"); break; } นี่คือคำสั่ง switch () ล้มเหลวด้วย 'ค่าประเภทหนึ่งที่คาดหมาย' และคำสั่งกรณีล้มเหลวด้วย 'คาดว่าจะมีค่าคงที่' ทำไมมีข้อ จำกัด เหล่านี้ในสถานที่และเหตุผลพื้นฐานคืออะไร? ผมไม่เห็นเหตุผลว่าทำไมงบเปลี่ยนใด ๆ ที่มีจะยอมจำนนต่อการวิเคราะห์แบบคงเท่านั้นและทำไมเป็นค่าเปิดที่จะเป็นหนึ่ง (นั่นคือดั้งเดิม) มี การให้เหตุผลคืออะไร

5
เพิ่ม“ หรือ” ในคำสั่ง switch ได้อย่างไร
นี่คือสิ่งที่ฉันต้องการทำ: switch(myvar) { case: 2 or 5: ... break; case: 7 or 12: ... break; ... } ฉันลองใช้ "case: 2 || 5" แล้ว แต่ไม่ได้ผล จุดประสงค์คือไม่เขียนโค้ดเดียวกันสำหรับค่าที่ต่างกัน

8
ข้อผิดพลาดของคำสั่ง switch case: การแสดงออกของ case จะต้องเป็น expression ที่คงที่
คำสั่ง switch-case ทำงานได้อย่างสมบูรณ์แบบเมื่อวานนี้ แต่เมื่อฉันเรียกใช้โค้ดก่อนหน้านี้คราสเมื่อเช้านี้ทำให้ฉันมีข้อผิดพลาดที่ขีดเส้นใต้คำสั่ง case เป็นสีแดงและพูดว่า: การแสดงออกของ case ต้องแสดงออกอย่างต่อเนื่องมันคงที่ฉันไม่รู้ว่าเกิดอะไรขึ้น นี่คือรหัสของฉันด้านล่าง: public void onClick(View src) { switch(src.getId()) { case R.id.playbtn: checkwificonnection(); break; case R.id.stopbtn: Log.d(TAG, "onClick: stopping srvice"); Playbutton.setImageResource(R.drawable.playbtn1); Playbutton.setVisibility(0); //visible Stopbutton.setVisibility(4); //invisible stopService(new Intent(RakistaRadio.this,myservice.class)); clearstatusbar(); timer.cancel(); Title.setText(" "); Artist.setText(" "); break; case R.id.btnmenu: openOptionsMenu(); break; } } R.id.int ทั้งหมดจะถูกขีดเส้นใต้ด้วยสีแดง

9
เหตุใดคำสั่ง String switch จึงไม่รองรับกรณีว่าง
ฉันแค่สงสัยว่าทำไมswitchคำสั่งJava 7 ไม่รองรับnullเคสและโยนแทนNullPointerException? ดูบรรทัดแสดงความคิดเห็นด้านล่าง (ตัวอย่างจากบทความ Java Tutorials บนswitch ): { String month = null; switch (month) { case "january": monthNumber = 1; break; case "february": monthNumber = 2; break; case "march": monthNumber = 3; break; //case null: default: monthNumber = 0; break; } return monthNumber; } สิ่งนี้จะหลีกเลี่ยงifเงื่อนไขสำหรับการตรวจสอบค่าว่างก่อนการswitchใช้งานทุกครั้ง

8
ความแตกต่างของประสิทธิภาพสัมพัทธ์ของคำสั่ง if / else กับ switch ใน Java คืออะไร?
กังวลเกี่ยวกับประสิทธิภาพของเว็บแอปพลิเคชันของฉันฉันสงสัยว่าคำสั่ง "if / else" หรือคำสั่ง switch ใดดีกว่าสำหรับประสิทธิภาพ

3
การใช้ if (0) เพื่อข้ามเคสในสวิตช์ควรจะใช้งานได้หรือไม่?
ฉันมีสถานการณ์ที่ฉันต้องการสองกรณีในคำสั่งสลับ C ++ ให้ทั้งสองตกไปอยู่ในกรณีที่สาม โดยเฉพาะกรณีที่สองจะตกไปสู่กรณีที่สามและกรณีแรกก็จะตกไปสู่กรณีที่สามโดยไม่ผ่านกรณีที่สอง ฉันมีความคิดโง่ ๆ ลองทำดูและได้ผล! ฉันห่อกรณีที่สองใน...if (0) { }ดูเหมือนว่า: #ifdef __cplusplus # include <cstdio> #else # include <stdio.h> #endif int main(void) { for (int i = 0; i < 3; i++) { printf("%d: ", i); switch (i) { case 0: putchar('a'); // @fallthrough@ if (0) { // …

12
เปลี่ยนคำสั่งผ่าน ... ควรได้รับอนุญาตหรือไม่? [ปิด]
ตามที่กล่าวไว้ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบถาม & ตอบของเรา เราคาดหวังว่าคำตอบจะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจก่อให้เกิดการถกเถียงโต้แย้งการสำรวจความคิดเห็นหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงได้และอาจเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อรับคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา ตราบเท่าที่ฉันจำได้ฉันได้หลีกเลี่ยงการใช้คำสั่ง switch fall-through จริงๆแล้วฉันจำไม่ได้เลยว่ามันเข้าสู่จิตสำนึกของฉันเป็นวิธีที่เป็นไปได้ในการทำสิ่งต่างๆในขณะที่มันถูกเจาะเข้ามาในหัวของฉันในช่วงต้นว่ามันไม่มีอะไรมากไปกว่าข้อผิดพลาดในคำสั่งสวิตช์ อย่างไรก็ตามวันนี้ฉันพบโค้ดบางอย่างที่ใช้โดยการออกแบบซึ่งทำให้ฉันสงสัยทันทีว่าทุกคนในชุมชนคิดอย่างไรเกี่ยวกับคำสั่งสวิตช์ที่ผิดพลาด เป็นสิ่งที่ภาษาโปรแกรมไม่ควรอนุญาตอย่างชัดเจน (เช่น C # แม้ว่าจะมีวิธีแก้ปัญหา) หรือเป็นคุณลักษณะของภาษาใด ๆ ที่มีประสิทธิภาพเพียงพอที่จะปล่อยให้อยู่ในมือของโปรแกรมเมอร์หรือไม่? แก้ไข: ฉันไม่ได้เจาะจงเพียงพอกับสิ่งที่ฉันหมายถึงโดยการตกผ่าน ฉันใช้ประเภทนี้บ่อยมาก: switch(m_loadAnimSubCt){ case 0: case 1: // Do something break; case 2: case 3: case 4: // Do something break; } อย่างไรก็ตามฉันกังวลเกี่ยวกับเรื่องนี้ switch(m_loadAnimSubCt){ case 0: case 1: …

13
คำสั่งสวิตช์ Java หลายกรณี
เพียงแค่พยายามหาวิธีใช้หลาย ๆ กรณีสำหรับคำสั่งสวิตช์ Java นี่คือตัวอย่างของสิ่งที่ฉันพยายามทำ: switch (variable) { case 5..100: doSomething(); break; } เมื่อเทียบกับต้องทำ: switch (variable) { case 5: case 6: etc. case 100: doSomething(); break; } ความคิดใด ๆ ถ้าเป็นไปได้หรือทางเลือกที่ดีคืออะไร?

5
ทำไมสวิตช์ถึงเร็วกว่าถ้า
หนังสือ Java จำนวนมากอธิบายswitchคำสั่งว่าเร็วกว่าif elseคำสั่ง แต่ผมไม่ได้หาได้ทุกเหตุผลที่สวิทช์จะเร็วกว่าถ้า ตัวอย่าง ฉันมีสถานการณ์ที่ต้องเลือกหนึ่งรายการจากสองรายการ ฉันสามารถใช้ได้ทั้ง switch (item) { case BREAD: //eat Bread break; default: //leave the restaurant } หรือ if (item == BREAD) { //eat Bread } else { //leave the restaurant } การพิจารณารายการและ BREAD เป็นค่า int คงที่ ในตัวอย่างข้างต้นซึ่งดำเนินการได้เร็วกว่าและทำไม?

19
จะแยกวงออกจากสวิตช์ภายในได้อย่างไร?
ฉันกำลังเขียนโค้ดที่มีลักษณะดังนี้: while(true) { switch(msg->state) { case MSGTYPE: // ... break; // ... more stuff ... case DONE: break; // **HERE, I want to break out of the loop itself** } } มีวิธีใดโดยตรงที่จะทำเช่นนั้น? ฉันรู้ว่าฉันสามารถใช้แฟล็กและแยกตัวออกจากลูปได้โดยใส่ตัวแบ่งเงื่อนไขไว้หลังสวิตช์ ฉันแค่อยากรู้ว่า C ++ มีโครงสร้างสำหรับสิ่งนี้หรือไม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.