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

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


30
การเปลี่ยนคำสั่งสวิตช์ใน Python?
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ ฉันต้องการเขียนฟังก์ชั่นใน Python ที่ส่งกลับค่าคงที่ที่แตกต่างกันตามค่าของดัชนีอินพุท ในภาษาอื่นฉันจะใช้ a switchหรือcasestatement แต่ Python ไม่ปรากฏว่ามีswitchstatement โซลูชัน Python ที่แนะนำในสถานการณ์นี้คืออะไร

15
ทำไมฉันไม่สามารถใช้คำสั่ง switch บน String ได้
ฟังก์ชั่นนี้จะถูกเพิ่มเข้าไปในเวอร์ชั่น Java ภายหลังหรือไม่? บางคนสามารถอธิบายได้ว่าทำไมฉันไม่สามารถทำสิ่งนี้ในขณะที่switchคำสั่งทางเทคนิคของ Java ทำงานได้หรือไม่

23
ทำไมไม่สามารถประกาศตัวแปรในคำสั่ง switch ได้?
ฉันสงสัยอยู่เสมอว่าทำไมคุณไม่สามารถประกาศตัวแปรหลังจากเลเบลเคสในคำสั่ง switch? ใน C ++ คุณสามารถประกาศตัวแปรได้ทุกที่ (และประกาศให้ใกล้เคียงกับการใช้งานครั้งแรกเห็นได้ชัดว่าเป็นสิ่งที่ดี) แต่สิ่งต่อไปนี้ยังคงไม่ทำงาน: switch (val) { case VAL: // This won't work int newVal = 42; break; case ANOTHER_VAL: ... break; } ข้างต้นทำให้ฉันข้อผิดพลาดต่อไปนี้ (MSC): การเริ่มต้นของ 'newVal' ถูกข้ามโดยป้ายกำกับ 'case' นี่เป็นข้อ จำกัด ในภาษาอื่นด้วย ทำไมปัญหานี้ถึงเป็นเช่นนั้น?

21
สลับคำสั่งหลายกรณีใน JavaScript
ฉันต้องการหลายกรณีในงบ switch ใน JavaScript สิ่งที่ชอบ: switch (varName) { case "afshin", "saeed", "larry": alert('Hey'); break; default: alert('Default case'); break; } ฉันจะทำสิ่งนั้นได้อย่างไร ถ้ามีวิธีที่จะทำสิ่งที่ต้องการที่ใน JavaScript ไม่ฉันต้องการที่จะรู้วิธีการแก้ปัญหาทางเลือกที่ยังตามแนวคิดแห้ง

18
หลายกรณีในคำสั่งเปลี่ยน
มีวิธีการผ่านงบหลายกรณีโดยไม่ระบุcase value:ซ้ำ ๆ ? ฉันรู้ว่างานนี้: switch (value) { case 1: case 2: case 3: // Do some stuff break; case 4: case 5: case 6: // Do some different stuff break; default: // Default stuff break; } แต่ฉันต้องการทำสิ่งนี้: switch (value) { case 1,2,3: // Do something break; case 4,5,6: // …

14
สลับคำสั่งผิดพลาดใน C # หรือไม่
การเปลี่ยนคำสั่งผิดพลาดเป็นหนึ่งในเหตุผลสำคัญที่ทำให้ฉันรักswitchกับการif/else ifสร้าง ตัวอย่างอยู่ในลำดับที่นี่: static string NumberToWords(int number) { string[] numbers = new string[] { "", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; string[] tens = new string[] { "", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; string[] teens = new string[] { "ten", "eleven", …

30
มีทางเลือกอื่นที่ดีกว่านี้ในการ "เปิดใช้ประเภท" หรือไม่
การเห็นว่า C # ไม่สามารถใช้switchกับประเภท (ซึ่งฉันรวบรวมไม่ได้เพิ่มเป็นกรณีพิเศษเนื่องจากisความสัมพันธ์หมายความว่าcaseอาจมีการใช้มากกว่าหนึ่งที่แตกต่างกัน) มีวิธีที่ดีกว่าในการจำลองการสลับกับชนิดอื่นนอกเหนือจากนี้หรือไม่ void Foo(object o) { if (o is A) { ((A)o).Hop(); } else if (o is B) { ((B)o).Skip(); } else { throw new ArgumentException("Unexpected type: " + o.GetType()); } }

3
คำสั่งกรณีที่มีหลายค่าในแต่ละบล็อก 'เมื่อ'
วิธีที่ดีที่สุดที่ฉันสามารถอธิบายสิ่งที่ฉันกำลังมองหาคือการแสดงรหัสที่ล้มเหลวที่ฉันได้ลองไปแล้ว: case car when ['honda', 'acura'].include?(car) # code when 'toyota' || 'lexus' # code end ฉันมีประมาณ 4 หรือ 5 ที่แตกต่างกันwhenในสถานการณ์ที่ควรจะเรียกโดยประมาณ 50 carค่าที่เป็นไปแตกต่างกันของ มีวิธีทำเช่นนี้กับcaseบล็อกหรือฉันควรลองifบล็อกขนาดใหญ่หรือไม่?

11
การใช้สองค่าสำหรับคำสั่ง switch case หนึ่งคำสั่ง
ในรหัสของฉันโปรแกรมทำบางสิ่งบางอย่างขึ้นอยู่กับข้อความที่ป้อนโดยผู้ใช้ รหัสของฉันดูเหมือนว่า: switch (name) { case text1: { //blah break; } case text2: { //blah break; } case text3: { //blah break; } case text4: { //blah break; } อย่างไรก็ตามรหัสในกรณีtext1และtext4เหมือนกัน ฉันจึงสงสัยว่ามันจะเป็นไปได้ไหมที่ฉันจะทำอะไรบางอย่างที่เป็นไปได้ case text1||text4: { //blah break; } ฉันรู้ว่า||ผู้ประกอบการจะไม่ทำงานในคำสั่งกรณี แต่มีสิ่งที่คล้ายกันฉันสามารถใช้

4
เหตุใด Java จึงเปิดสวิตช์ int ที่ต่อเนื่องกันจึงปรากฏว่าทำงานเร็วขึ้นพร้อมกับเคสเพิ่มเติม
ฉันกำลังทำงานกับโค้ด Java บางตัวซึ่งจำเป็นต้องปรับให้เหมาะสมอย่างมากเนื่องจากมันจะทำงานในฟังก์ชั่นฮ็อตที่มีการเรียกใช้หลาย ๆ จุดในลอจิกโปรแกรมหลักของฉัน เป็นส่วนหนึ่งของรหัสนี้เกี่ยวข้องกับการคูณdoubleตัวแปรโดย10ยกพลไม่ใช่เชิงลบint exponents วิธีหนึ่งที่รวดเร็ว (แก้ไข: แต่ไม่ใช่วิธีที่เร็วที่สุดโปรดดูอัปเดตที่ 2 ด้านล่าง) เพื่อรับค่าที่คูณได้switchในexponent: double multiplyByPowerOfTen(final double d, final int exponent) { switch (exponent) { case 0: return d; case 1: return d*10; case 2: return d*100; // ... same pattern case 9: return d*1000000000; case 10: return d*10000000000L; // ... …

23
เป็นไปได้ไหมที่จะใช้ตัวดำเนินการ instanceof ในคำสั่ง switch?
ฉันมีคำถามเกี่ยวกับการใช้สวิตช์ตัวพิมพ์เล็กสำหรับinstanceofวัตถุ: ตัวอย่างเช่นปัญหาของฉันสามารถทำซ้ำได้ใน Java: if(this instanceof A) doA(); else if(this instanceof B) doB(); else if(this instanceof C) doC(): มันจะใช้งานได้switch...caseอย่างไร?

6
Java: การใช้คำสั่ง switch กับ enum ภายใต้คลาสย่อย
ก่อนอื่นฉันจะระบุว่าฉันคุ้นเคยกับ enums ใน C # มากขึ้นและดูเหมือนว่า enums ใน java นั้นค่อนข้างยุ่ง อย่างที่คุณเห็นฉันกำลังพยายามใช้ switch statement @ enums ในตัวอย่างถัดไปของฉัน แต่ฉันได้รับข้อผิดพลาดเสมอไม่ว่าฉันจะทำอะไร ข้อผิดพลาดที่ฉันได้รับคือ: SomeClass.AnotherClass.MyEnum.VALUE_Aต้องเปลี่ยนฉลากเคสที่ผ่านการรับรองด้วยค่าคงที่ enum ที่ไม่มีเงื่อนไขVALUE_A สิ่งนี้คือฉันค่อนข้างเข้าใจถึงข้อผิดพลาด แต่ฉันไม่สามารถเขียน VALUE_A ได้เนื่องจาก enum ตั้งอยู่ในคลาสย่อยอื่น มีวิธีแก้ไขปัญหานี้หรือไม่? แล้วทำไมมันถึงเกิดขึ้นใน Java? //Main Class public class SomeClass { //Sub-Class public static class AnotherClass { public enum MyEnum { VALUE_A, VALUE_B } public …

21
ควรเปลี่ยนคำสั่งที่มีข้อเริ่มต้นเสมอ?
ในรีวิวรหัสแรกของฉัน (กลับมาอีกครั้ง) ฉันได้รับแจ้งว่าเป็นการดีที่จะรวมส่วนเริ่มต้นในประโยคเปลี่ยนทั้งหมด ฉันเพิ่งจำคำแนะนำนี้ แต่จำไม่ได้ว่าเหตุผลคืออะไร ตอนนี้ฟังดูแปลกสำหรับฉันแล้ว มีเหตุผลที่สมเหตุสมผลหรือไม่ในการรวมคำสั่งเริ่มต้นเสมอ? ภาษานี้ขึ้นอยู่กับอะไร? ฉันจำไม่ได้ว่าฉันใช้ภาษาอะไรในขณะนี้ - บางทีนี่อาจใช้กับบางภาษาและไม่ใช่กับคนอื่น ๆ ?

12
'สลับ' เร็วกว่า 'ถ้า' หรือไม่
เป็นswitchคำสั่งจริงเร็วกว่าifคำสั่ง? ฉันรันโค้ดด้านล่างในคอมไพเลอร์ x64 C ++ ของ Visual Studio 2010 ด้วย/Oxค่าสถานะ: #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX_COUNT (1 << 29) size_t counter = 0; size_t testSwitch() { clock_t start = clock(); size_t i; for (i = 0; i < MAX_COUNT; i++) { switch (counter % 4 + 1) { …

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