Lớp Math
Đã giới thiệuTheo dõi dải ngẫu nhiên ở cả hai đầu
- Véte cần nhãn nguyên từ 4 đến 9 bao gồm cả hai đầu. Sử dụng (int)(Math.random() * 6) + 4.
- Phép nhân tỷ lệ cho giá trị từ 0 lên đến nhưng không bao gồm 6; cắt phần thập phân cho 0 đến 5; dịch chuyển cho 4 đến 9.
Bộ công cụ toán học
- Lớp
Mathlà thư viện chứa sẵn các phương thức class và hằng số toán học. Không cần import hay tạo đối tượng — chỉ gọiMath.something(...). - Nó bao gồm lũy thừa, căn bậc, làm tròn, giá trị tuyệt đối, min/max, v.v. Chọn phương thức mà đầu vào, kiểu đầu ra và ý nghĩa toán học phù hợp với bài tập; không phải đầu vào nào cũng có kết quả hữu hạn thông thường.
Các phương thức thường gặp trong AP
Math.abs(x)— giá trị tuyệt đối:Math.abs(-5)là5.Math.pow(b, e)—blũy thừae:Math.pow(2, 3)là8.0.Math.sqrt(x)— căn bậc hai:Math.sqrt(9)là3.0.Math.max(a, b)/Math.min(a, b)— giá trị lớn hơn / nhỏ hơn trong hai giá trị.
Số ngẫu nhiên
Math.random()trả về mộtdoubletrong khoảng0.0đến (không bao gồm)1.0. Thu phóng và dịch chuyển nó cho một khoảng:(int)(Math.random() * 6)cho0–5.- Thêm
1để mô phỏng tung xúc xắc:(int)(Math.random() * 6) + 1cho1–6. Với độ rộng n là số nguyên dương, khiêm tốn, sao cho nhãn kết quả vừa khít int,(int)(Math.random() * n) + startcho n nhãn số nguyên khả thi. Từ 4 đến 9 bao gồm cả hai đầu mút, n là9 - 4 + 1 = 6.
Xây dựng kết quả lăn xúc xắc từ Math.random()
Nhân, làm tròn xuống rồi cộng để có giá trị từ 1-6.
Math.pow(2, 3) bằng bao nhiêu (dưới dạng số)?
Độ khó 2/5 · 140 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
2 mũ 3 = 8 (trả về dưới dạng double 8.0).
Math.sqrt(9) trả về giá trị có kiểu gì?
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
sqrt luôn trả về double — cần ép kiểu để dùng làm int.
Math.random() trả về một double nằm trong khoảng nào?
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
[0.0, 1.0) — cận trên 1.0 không bao giờ được trả về.
Biểu thức nào tạo ra số nguyên ngẫu nhiên từ 1 đến 6?
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Nhân 6 → 0..5, làm tròn xuống, rồi +1 → 1..6.
Giá trị của Math.abs(-5) là gì?
Độ khó 2/5 · 140 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Giá trị tuyệt đối của −5 là 5.
Chú ý kiểu dữ liệu trả về
Math.powvàMath.sqrtluôn trả về mộtdouble(ví dụ:8.0, không phải8). Để dùng kết quả như mộtint, bạn bắt buộc phải ép kiểu:(int) Math.pow(2, 3).Math.random()cũng là mộtdouble— hãy ép kiểu sau khi thu phóng, không phải trước. Lộn xộn giữaintvàdoublelà lỗi phổ biến của lớp Math.
Math.pow và Math.sqrt trả về một double, không phải int. Math.pow(2, 3) là 8.0; lưu nó vào một double, hoặc ép kiểu để dùng nó như một int. Và Math.random() trả về một double nằm trong [0.0, 1.0) — giới hạn trên 1.0 sẽ không bao giờ được trả về. Xây dựng một khoảng nguyên bằng cách dùng (int)(Math.random() * n) + start.
Order the operations that build labels 4 through 9.
Độ khó 3/5 · 200 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Scaling must happen before the cast; otherwise every initial cast is zero.
Đối với các nhãn từ 4 đến 9, thay thế u=0 vào biểu thức (int)(u * 6) + 4. Kết quả thu được sẽ là nhãn nào?
Độ khó 2/5 · 140 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Giá trị đã được nhân scale và ép kiểu bằng 0, sau đó cộng thêm 4.
Math.sqrt(-1) sẽ gây ra ngoại lệ thay vì trả về kết quả là số double.
Độ khó 1/5 · 100 xu + một phần thưởng nhỏ cho lần hoàn thành đầu tiên trong ngày
Nó trả về giá trị đặc biệt NaN; điều này khác với việc gây ra ngoại lệ.
Một lần ném xúc xắc ngẫu nhiên (1–6):
Math.random()→ một số thực như0.42.Math.random() * 6→ từ0.0đến gần6.0nhưng chưa tới (như2.52).(int)(Math.random() * 6) + 1→ cắt bỏ phần thập phân thành2, rồi+1→3.
Mở rộng suy luận sang trường hợp mới
- Ép kiểu trước khi thu phóng,
(int)Math.random() * 6 + 4, luôn cho 4. Kiểm tra u=0 và một giá trị biểu diễn được ngay dưới 1 trong(int)(u * 6) + 4: các điểm biên khả dĩ là 4 và 9; u=1 nằm ngoài phạm vi của phương thức ngẫu nhiên. - Các phương thức thư viện cũng có hành vi biên:
Math.sqrt(-1)trả về NaN, vàMath.abs(Integer.MIN_VALUE)trả về số nguyên âm đó vì độ lớn dương của nó không thể nhét vừa int. Ví dụ thông thường abs(-5)=5 vẫn đúng.
Lớp Math cung cấp các phương thức tĩnh: abs, pow, sqrt, max, min, và random. pow/sqrt trả về một double (cần ép kiểu để lấy int). Math.random() trả về một double trong [0.0, 1.0); xây dựng khoảng nguyên bằng cách dùng (int)(Math.random() * n) + start.