Nested if Statements
แนะนำใหม่| English | ความหมาย |
|---|---|
| nested if/ˈnestɪd ɪf/ | if แบบซ้อนกัน |
Branch แรกที่กว้างกลบเกรดสูงสุด
- เกณฑ์คะแนนแบบบันไดจะทดสอบ
s >= 60ก่อนelse if (s >= 90)เมื่อ s=95 เงื่อนไขแรกจะเป็นจริง ทำให้สายการงานนั้นทำงาน และสายคะแนนสูงสุดจะไม่เคยถูกทดสอบ - สำหรับขอบเขตล่างที่ซ้อนทับกัน ให้ทดสอบเกณฑ์ที่สูงกว่าก่อน นี่คือกฎการให้เหตุผลสำหรับบันไดนี้ ไม่ใช่ข้อกำหนดที่ต้องเรียงทุกเงื่อนไขที่เป็นไปได้จาก “เฉพาะเจาะจงที่สุด” ไปหา “ไม่เฉพาะเจาะจงที่สุด”
การซ้อนกันทำให้การตัดสินใจขึ้นอยู่กับเส้นทางที่ห่อหุ้มอยู่
- if ที่ซ้อนกัน คือการวาง if ไว้ภายในสาขาอื่น หากคำสั่งภายในอยู่ในสาขา true ของภายนอก มันจะถูกเข้าถึงก็ต่อเมื่อเงื่อนไขภายนอกนั้นเป็นจริงเท่านั้น; แต่ถ้า if อยู่ภายใน else มันจะถูกเข้าถึงในเส้นทาง false แทน
- ใช้วงเล็บปีกกาเพื่อแสดงโครงสร้างนั้น else โดยไม่มีวงเล็บปีกกาจะผูกกับ if ที่ closest ซึ่งอาจต่างจากสิ่งที่ช่องว่างหรือการจัดบรรทัดบ่งบอกไว้
บันไดจะเลือกสาขาแรกที่ตรงกัน
- 一个
if ... else if ... else梯子(if ladder)从上至下检查条件,直到遇到第一个为真的条件为止。如果带有最终的 else 分支,当条件评估完成时会选中一个分支执行;如果没有 else,则可能没有任何分支运行。 - วิธีด้านล่างนี้รับคะแนนจำนวนเต็มปกติและคืนค่า A, B, C หรือ F สำหรับ 85 มันจะตรวจสอบ 90, จากนั้น 80, คืนค่า B, และไม่ประเมินการทดสอบสาขาที่เหลืออีกต่อไป
public class GradeChoice {
public static String grade(int s) {
if (s >= 90) {
return "A";
} else if (s >= 80) {
return "B";
} else if (s >= 70) {
return "C";
} else {
return "F";
}
}
}
แยกความซ้อนทับออกจากกรณีที่ไม่ซ้อนทับ
- เมื่อมีขอบเขตล่างที่ซ้อนทับกัน
s >= 60จะครอบคลุมคะแนนทุกตัวที่สอดคล้องกับs >= 90การนำมันไปไว้ก่อนจะช่วยป้องกันไม่ให้สาขาที่สองถูกเลือก แม้ว่าจะสามารถคอมไพล์บันไดด้วย Java ได้ก็ตาม - สำหรับการทดสอบที่ไม่ซ้อนทับอย่างแท้จริงเช่น
x < 0,x == 0และx > 0, การเปลี่ยนลำดับของพวกมันโดยยังคงผลลัพธ์เดิมอาจไม่จำเป็นต้องเปลี่ยนผลลัพธ์ นโยบายที่ซ้อนทับกันอาจเลือกกรณีหนึ่งไว้เป็นลำดับความสำคัญแทน; ให้ปฏิบัติตามข้อกำหนดที่ระบุไว้
ветвь (branch) ที่เป็นจริงแรกชนะ
s = 85 เข้า ветвь >= 80 (B); вет旅后面将被跳过。
ใน else-if ladder, บล็อกของเงื่อนไข哪一个 runs?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Java 从上到下选择第一个 จริง 的条件
สำหรับ if (s>=90) A; else if (s>=80) B; else C; เมื่อ s = 85, ผลลัพธ์คือ...
Difficulty 1/5 · 100 coins + a small bonus on first completion today
85 ล้มเหลว ≥90 แต่ผ่าน ≥80 → B, แล้วหยุด
หากเงื่อนไขกว้างกว่ามา居前 before a narrower one in a ladder, ветвь狭窄 can become unreachable.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
เงื่อนไขกว้างจับกรณีเหล่านี้ก่อน; วางที่แคบที่สุดก่อน
สำหรับ if ภายในที่วางอยู่ในส่วน true ของ if ภายนอก เงื่อนไขภายในจะถูกตรวจสอบแม้ว่าเงื่อนไขภายนอกจะเป็น false ก็ตาม
Difficulty 1/5 · 100 coins + a small bonus on first completion today
คำสั่งภายในนั้นจะไม่ถูกดำเนินการในเส้นทาง false หากมี if วางอยู่ในส่วน else จะมีเส้นทางห่อหุ้มที่แตกต่างกัน
สำหรับระดับเกรดที่แสดงโดยใช้ s >= 90, s >= 80 และ s >= 70 การเรียงลำดับใดจะรักษาเกรดสูงสุดตามเจตนาได้?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ค่าขอบเขตล่างที่สูงกว่ามาก่อนเพราะการเปรียบเทียบเหล่านี้ซ้อนทับกัน นี่คือกฎการจัดลำดับที่ไม่ใช่กฎสากลสำหรับเงื่อนไข Boolean ทั้งหมด
แยก if ที่เป็นอิสระออกจากบันได
- คำสั่งแยกสองตัว,
if (s >= 60) ...; if (s >= 90) ...;, ทั้งคู่จะทำงานตามเนื้อหาสำหรับ s=95.basename else-if เชื่อมโยงทางเลือกเหล่านี้และเลือกเพียงครั้งแรกที่ตรงกันเท่านั้น - ติดตามด้วยค่าจริงที่จุด soglia และต่ำกว่าเล็กน้อย: 90 ไปยัง A, 89 ไปยัง B, 80 ไปยัง B, 79 ไปยัง C และ 69 ไปยัง F การทดสอบเพียง 85 จะพลาดตัวดำเนินการขอบเขตที่ผิด
“ใครเป็นจริงก่อนชนะ” อธิบายถึง.basename ที่เชื่อมโยงกัน ไม่ใช่ if หลายตัวที่เป็นอิสระ สาขาหนึ่งอาจไม่สามารถเลือกได้เนื่องจากคำเปรียบเทียบก่อนหน้าจับทุกอินพุตของมันโดยไม่ก่อให้เกิดข้อผิดพลาด unreachable-statement ระดับคอมไพล์
มี if สองตัวอิสระทดสอบ s >= 60 และ s >= 90 สำหรับ s=95 จะมีบอดี้ทำงานกี่ครั้ง?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
เงื่อนไขทั้งสองเป็นจริงและคำสั่งเป็นอิสระต่อกัน ดังนั้นบอดี้ทั้งสองจึงทำงาน
ติดตามสาขา false ของ if ด้านนอก
- ใน
if (weekday) { ... } else { if (raining) { ... } }, การทดสอบฝนด้านในจะถูกเข้าถึงเมื่อ weekday เป็น false สาขาที่ห่อหุ้มอยู่ (ไม่ใช่แค่คำว่า “nested”) กำหนดเวลาที่จะทำงาน - ระบุวงเล็บปีกกา, ทางเลือกที่เชื่อมโยงกัน, เงื่อนไขที่ซ้อนทับกัน และอินพุตจริงก่อนจะคาดการณ์เส้นทาง รักษานโยบายของโค้ดและการทดสอบขอบเขตให้สอดคล้องกัน; การจัดบรรทัดเพียงอย่างเดียวไม่ได้กำหนดการรวมกลุ่มของ Java
if ที่ซ้อนกันจะทำงานก็ต่อเมื่อการควบคุมเดินทางไปยังสาขาที่ห่อหุ้มอยู่.basename ที่เชื่อมโยงกันจะเลือกเงื่อนไขที่เป็นจริงครั้งแรก; if ที่เป็นอิสระสามารถทำงานหลายเนื้อหาได้ เกณฑ์ที่สูงกว่ามาก่อนในบันไดคะแนนชนิดนี้เนื่องจากเงื่อนไขของมันซ้อนทับกัน
With if (s >= 60) result = 1; else if (s >= 90) result = 2; else result = 3;, what is result for s = 95?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
95 satisfies the first comparison, so result becomes 1 and the else-if branch is skipped.
if ที่อยู่ในส่วน else ภายนอกสามารถเข้าถึงได้เมื่อเงื่อนไขภายนอกเป็น false
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ใช่: เส้นทาง false ภายนอกเข้าสู่ else ซึ่งการทดสอบภายในอาจทำงานได้