2012-01-18 3 views
5

Xin chào, tôi cần tạo một số ngẫu nhiên trong JavaScript từ 15 đến 225 mà chỉ có thể là gia số 30. Ví dụ: 45, 75, 105, v.v.Số ngẫu nhiên JavaScript giữa 15 và 225 Số gia tăng 30?

Bất kỳ ý tưởng nào về cách thực hiện điều này? Tôi biết về Math.floor(Math.random()*11) ví dụ cho một số ngẫu nhiên 1-10 nhưng làm thế nào điều này có thể được sửa đổi để phù hợp với những gì tôi đang cố gắng để làm gì?

+0

'Math.floor (Math.random() * 11)' sẽ trả về một số '[0-10]', trong khi 'Math.floor (Math.random() * 10) + 1' sẽ trả về một số '[1-10]'. – zzzzBov

Trả lời

3

Bạn cần phải suy nghĩ về kết quả cuối cùng mà bạn muốn. Từ 15 đến 225 là những gì bạn muốn nhắm đến, nhưng không phải những gì bạn cần phải làm việc để có được kết quả.

225/30 = 7.5. 15 là một nửa của 30. Vì vậy, (225-15)/30 = 7. Bạn muốn có một số ngẫu nhiên giữa 1 và 7, sau đó bạn sẽ nhân với 30 và thêm 15 vào kết quả cuối cùng.

var myNumber = Math.floor(Math.random()*7); 
myNumber = myNumber *30 + 15; 

console.log(myNumber); 
+4

Tôi thực sự không ngại không nhận được câu trả lời được chấp nhận, nhưng điều này thực sự là sai. Bạn sẽ không bao giờ nhận được 225, chỉ fyi – Joe

+1

Nó thực sự phải là 'var myNumber = Math.floor (Math.random() * 8);'. –

+0

cảm ơn bạn. Tôi đứng sửa. – nosarious

6

Giống như rất

Math.floor(Math.random()*8)*30 + 15 
+2

nhận được câu trả lời này đòi hỏi đại số trung học mà hầu hết các sinh viên không bao giờ mong đợi để sử dụng. – zzzzBov

5

thế nào về việc sử dụng:

[15, 45, 75, 105, 135, 165, 195, 225][Math.floor(Math.random()*8)] 
+0

Tôi thích cái này tốt nhất dựa trên [** KISS **] (http://en.wikipedia.org/wiki/KISS_principle) nguyên tắc – qwertymk

+0

, tôi đã suy nghĩ 'random.choice (phạm vi (15,225 + 1, 30)) 'và đây là javascript của điều đó. –

+0

Trường hợp đó từ đâu? – qwertymk

0

Dưới đây là một chức năng mà precomputes tất cả các số có thể, và ngẫu nhiên trở lại một.

function getRandomNumber(start, end, increments) { 
    var numbers = []; 
    for(var n = start; n <= end; n += increments) { 
     numbers.push(n); 
    } 

    var randomIndex = Math.floor(Math.random() * numbers.length); 
    return numbers[randomIndex]; 
} 

Use as,

getRandomNumber(15, 225, 30) 
3

Bắt đầu với bảng giá trị

x | y 
======= 
0 | 15 
1 | 45 
2 | 75 
3 | 105 
4 | 135 
5 | 165 
6 | 195 
7 | 225 

Thiết lập phương trình

y = ax + b 

Cắm một số giá trị ban đầu

15 = a(0) + b 

Giải quyết cho bất kỳ biến bạn có thể

15 = b 

Cắm giá trị ban đầu khác nhau

225 = a(7) + 15 

Giải quyết cho bất kỳ biến còn lại

210 = a(7) 
30 = a 

Nhắc lại phương trình

y = 30x + 15 

Randomize x giữa các giới hạn

x = Math.floor(Math.random() * 8) //0-7 

Sử dụng chức năng

function customRandomNumber() { 
    var x; 
    x = Math.floor(Math.random() * 8); 
    return 30 * x + 15; 
} 

Bắt một số ngẫu nhiên trong một khoảng thời gian với một bước có thể được khái quát hóa trong hàm sau:

function rand(min, max, step) { 
    var delta, 
     range, 
     rand; 
    if (arguments.length < 2) { 
     max = min; 
     min = 0; 
    } 
    if (!step) { 
     step = 1; 
    } 
    delta = max - min; 
    range = delta/step; 
    rand = Math.random(); 
    rand *= range; 
    rand = Math.floor(rand); 
    rand *= step; 
    rand += min; 
    return rand; 
} 

Điều gì sẽ đặt dấu chấm câu của bạn ion như

rand(15, 225, 30); 

Tôi cũng nên lưu ý, bởi vì tôi đã quên về các vấn đề giới hạn khả năng, hình thức tổng quát sẽ không bao gồm các giới hạn trên của 225. Điều này là do Math.random() trả về một số lượng lớn lớn hơn hoặc bằng 0 và nhỏ hơn một (0 <= Math.random < 1).Nếu bạn muốn để bao gồm các giới hạn trên, bạn chỉ cần đưa thêm một bước nữa trong khoảng thời gian:

rand(15, 255, 30) //will return 15...225 
+0

'y = mx + b' không phải' y = ax + b' :) – qwertymk

+0

@qwertymk, tên biến mà bạn sử dụng không thực sự quan trọng. Tôi có thể viết 'foo = fizz * bar + buzz' và nó sẽ cho bạn kết quả tương tự. Lý do duy nhất mà sinh viên được dạy về quy ước của 'y = mx + b' là để chúng ta có thể đặt một tên nhất quán cho các biến để dễ tham khảo. – zzzzBov

+0

Sự hiểu biết của tôi là ở một số quốc gia, đặc biệt là Hoa Kỳ, 'y = mx + b' là tiêu chuẩn, trong khi ở các quốc gia khác, chẳng hạn như Liên minh châu Âu,' y = ax + b' là tiêu chuẩn. Dù bằng cách nào, nó thực sự không quan trọng. –