คลาส Math
แนะนำใหม่วิเคราะห์ช่วงสุ่มที่ขอบเขตทั้งสอง
- บัตรต้องการฉลากจำนวนเต็มตั้งแต่ 4 ถึง 9 รวมทั้งหมด ใช้ (int)(Math.random() * 6) + 4
- การคูณสเกลให้ค่าตั้งแต่ 0 ขึ้นไปจนถึงแต่ไม่รวม 6; การตัดทอนให้ 0 ถึง 5; การเลื่อนตำแหน่งให้ 4 ถึง 9
ชุดเครื่องมือทางคณิตศาสตร์
Mathคลาสคือไลบรารีของ class methods และคงค่าทางคณิตศาสตร์ที่พร้อมใช้งาน ไม่ต้อง import และไม่ต้องสร้าง object — เพียงแค่เรียกMath.something(...)- ครอบคลุมเรื่องกำลังราก การปัดเศษ ค่าสัมบูรณ์ ต่ำสุด/สูงสุด และอื่นๆ เลือก method ที่มีอินพุต ประเภทผลลัพธ์ และความหมายทางคณิตศาสตร์ตรงกับโจทย์; ไม่ใช่ทุกอินพุตจะมีผลเป็นจำนวนจริงจำกัดตามปกติ
เมทโธดที่พบบ่อยสำหรับ AP
Math.abs(x)— ค่าสัมบูรณ์:Math.abs(-5)คือ5Math.pow(b, e)—bยกกำลังe:Math.pow(2, 3)คือ8.0Math.sqrt(x)— รากที่สอง:Math.sqrt(9)คือ3.0Math.max(a, b)/Math.min(a, b)— ค่าที่ใหญ่กว่า / ค่าน้อยกว่าของสองค่า
ตัวเลขสุ่ม
Math.random()คืนค่าdoubleในช่วง0.0ขึ้นไปแต่ไม่รวม1.0ให้ปรับสเกลและเลื่อนตำแหน่งเพื่อสร้างช่วง:(int)(Math.random() * 6)ให้0–5- เพิ่ม
1เพื่อการโยนลูกเต๋า:(int)(Math.random() * 6) + 1ให้1–6สำหรับความกว้าง n ที่เป็นจำนวนเต็มบวกมีค่าพอเหมาะซึ่งฉลากที่ได้อยู่ใน int,(int)(Math.random() * n) + startให้ฉลากจำนวนเต็ม n แบบ possibility สำหรับ 4 ถึง 9 รวมทั้งหมด n คือ9 - 4 + 1 = 6
การสร้างการสุ่มลูกเต๋าจาก Math.random()
ปรับสเกล ตัดทอน แล้วเลื่อนตำแหน่งเพื่อได้ผลลัพธ์ 1-6
Math.pow(2, 3) มีค่าเท่าใด (ในรูปตัวเลข)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
2 ยกกำลัง 3 = 8 (ถูกส่งกลับเป็น double 8.0).
Math.sqrt(9) ส่งคืนค่าชนิดอะไร?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
sqrt ส่งคืนค่าเป็น double เสมอ — ต้อง cast เพื่อใช้เป็น int
Math.random() ส่งคืนค่า double ในช่วงไหน?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
[0.0, 1.0) — ขอบเขตบนคือ 1.0 จะไม่เคยถูกส่งคืน
นิพจน์ใดให้จำนวนเต็มสุ่มจาก 1 ถึง 6?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
ปรับสเกลด้วย 6 → 0..5, ตัดทอน, แล้ว +1 → 1..6.
Math.abs(-5) คืออะไร?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ค่าสัมบูรณ์ของ −5 คือ 5.
ระวังชนิดของค่าที่ส่งกลับมา
Math.powและMath.sqrtเสมอคืนค่าdouble(เช่น8.0ไม่ใช่8) หากต้องการใช้ผลลัพธ์เป็นintคุณต้อง cast:(int) Math.pow(2, 3)Math.random()ก็เป็นdoubleเช่นกัน — cast หลังการปรับสเกล ไม่ใช่ก่อน สลับintกับdoubleเป็นการผิดพลาดคลาสสิกของ Math class
Math.pow และ Math.sqrt คืนค่า double ไม่ใช่ int. Math.pow(2, 3) คือ 8.0; เก็บไว้ในตัวแปร double หรือ convert เพื่อใช้เป็น int. และ Math.random() ให้ผลเป็น double ใน [0.0, 1.0) — ขอบเขตบน 1.0 จะ ไม่มีวัน ถูกส่งกลับมา สร้างช่วงจำนวนเต็มด้วย (int)(Math.random() * n) + start
Order the operations that build labels 4 through 9.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Scaling must happen before the cast; otherwise every initial cast is zero.
สำหรับฉลาก 4 ถึง 9, แทนที่ u=0 ลงใน (int)(u * 6) + 4 ฉลากที่ได้คืออะไร?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
ค่าที่ปรับสเกลและ cast เป็นศูนย์ แล้ว 4 ถูกเพิ่มเข้าไป
Math.sqrt(-1) จะเกิดข้อผิดพลาด (exception) แทนที่จะส่งค่าผลลัพธ์แบบ double กลับมา
Difficulty 1/5 · 100 coins + a small bonus on first completion today
มันคืนค่าพิเศษของ double NaN; นี้ต่างจากข้อยกเว้น
การโยนลูกเต๋าสุ่ม (1–6):
Math.random()→ เป็น double อย่าง0.42Math.random() * 6→0.0ขึ้นไปจนถึงเกือบถึง6.0(เช่น2.52)(int)(Math.random() * 6) + 1→ ตัดทอนเป็น2แล้ว ++1→3
ขยายเหตุผลไปยังกรณีใหม่
- การ cast ก่อนการปรับสเกล,
(int)Math.random() * 6 + 4, ให้ผลลัพธ์เป็น 4 เสมอ ตรวจสอบ u=0 และค่าที่แสดงได้ใน(int)(u * 6) + 4ที่อยู่ต่ำกว่า 1 เล็กน้อย: จุดปลายที่เป็นไปได้คือ 4 และ 9; u=1 อยู่นอกช่วงของวิธีสุ่ม - วิธีในไลบรียังมีพฤติกรรมขอบเขต:
Math.sqrt(-1)คืน NaN, และMath.abs(Integer.MIN_VALUE)คืน int ลบเดียวกันนี้เพราะขนาดบวกไม่สามารถใส่ใน int ได้ ตัวอย่างทั่วไป abs(-5)=5 ยังคงเป็นจริง
คลาส Math มีเมทโธดแบบ static: abs, pow, sqrt, max, min และ random. pow/sqrt คืนค่า double (ต้อง cast เพื่อให้ได้ int). Math.random() คืนค่า double ในช่วง [0.0, 1.0); สร้างช่วงจำนวนเต็มด้วย (int)(Math.random() * n) + start