2014-10-21 3 views
0

У меня есть массив, который должен содержать 6 случайно сгенерированных чисел. Что я сделал для достижения нет дубликатов используется следующий код. Я думал, что это сработает, добавив 1 в дубликат, но потом снова снова появится к концу!Случайный генератор без дублированных чисел

userInput = document.getElementById('txtGen').value; 
var numbers = new Array(6); 
var msg = ''; 

for(var i=0;i<numbers.length;i++) 
{ 
    numbers[i] = Math.random() * userInput; 
    numbers[i] = Math.floor(numbers[i]); 
    if(numbers[i] == numbers[i-1]){ 
     numbers[i] = numbers[i++]; 
    } 
    msg += '<input id="num' + i + '"' + 'type="text" value="' + numbers[i] + '" />'; 

} 


document.getElementById('numbers').innerHTML = msg; 

Я также попытался это, но это тоже не сработало!

for(var i=0;i<numbers.length;i++) 
{ 
    numbers[i] = Math.random() * userInput; 
    numbers[i] = Math.floor(numbers[i]); 
    for(var b=0;b<numbers.length;b++) 
    { 
     if(numbers[b] == numbers[b--]){ 
      numbers[b] = numbers[b++]; 
     } 
    } 
    msg += '<input id="num' + i + '"' + 'type="text" value="' + numbers[i] + '" />'; 

} 
+0

'числа [I] = числа [я ++];' не имеет никакого эффекта, но еще 'i' приращение. – hindmost

ответ

1

Вы можете использовать indexOf, чтобы проверить, если номер уже в массиве. И если это так, вы можете создать новый номер.

var userInput = document.getElementById('txtGen').value; 
var numbers = new Array(6); 
for (var i = 0; i < numbers.length; i++) 
{ 
    var temp = 0; 
    do 
    { 
     temp = Math.floor(Math.random() * userInput); 
    } 
    while (numbers.indexOf(temp) > -1) 

    numbers[i] = temp; 
} 

document.getElementById("numbers").innerHTML = numbers.join(); // <- Write numbers to div. 
+0

Привет, я пробовал это, но, похоже, ничего не обнаружил! Вы опубликовали это для меня, чтобы попытаться заменить его? – James111

+0

Этот код просто заполняет массив, он ничего не выводит. Вам все равно нужно что-то сделать со значениями в массиве. – Jerodev

+0

Привет, у меня все еще есть проблемы, реализующие это, чтобы заставить его работать: \ @Jerodev – James111

0
userInput = document.getElementById('txtGen').value; 
var numbers = new Array(6),tempNo=new Array(6); 
var msg = ''; 

for(var i=0;i<numbers.length;i++) 
{ 
    tempNo[i] = Math.random() * userInput; 
    if(!numbers[tempNo[i]]){ 
     numbers[Math.floor(tempNo[i])] = Math.floor(tempNo[i]); 
     msg += '<input id="num' + i + '"' + 'type="text" value="' + Math.floor(tempNo[i]) + '" />'; 
    } 

} 

document.getElementById('numbers').innerHTML = msg; 

попробовать это с ассоциативным массивом

0

Попробуйте это решение ...

for(var i=0;i<numbers.length;i++) 
{ 
    numbers[i] = Math.random() * userInput; 
    numbers[i] = Math.floor(numbers[i]); 
    for(var b=1;b<numbers.length;b++) 
    { 
     if(numbers[b] == numbers[b--]){ 
      numbers[b] = Math.random() * userInput; 
      numbers[b] = Math.floor(numbers[b]); 
      b=1; 
     } 
    } 
    msg += '<input id="num' + i + '"' + 'type="text" value="' + numbers[i] + '" />'; 

} 
0

var output =document.getElementById('numbers'), 
 
    numbers = new Array(6), 
 
    msg = ''; 
 

 
for(var i=0;i<numbers.length;i++){ 
 
    numbers[i] = randomNumber() 
 
    msg += '<input id="num' + i + '"' + 'type="text" value="' + numbers[i] + '" />'; 
 
} 
 

 
function randomNumber(max){ 
 
    max = (max > 0) ? max : 100; 
 
    var a = 1 + max*(Math.random()); 
 
    return Math.round(a); 
 
} 
 

 

 
output.innerHTML = msg;
<div id="numbers"></div>

Смежные вопросы