2012-01-01 2 views
0

У меня проблема с этим скриптом, что-то не так. Rnumer остается неопределенным. Этот сценарий должен возвращать и записывать все неравные цифры из списка случайных чисел. Может кто-нибудь сказать мне, что я делаю неправильно. Заранее спасибоПеременная Javascript остается неопределенной

var Rnumber = new Array(); 

for (i = 0; i<= 100;i++) 
{ 
    Rnumber[i] = Math.ceil(Math.random()*101); 
// document.write(Rnumber[i] + "<br/>"); 
} 

function unevenAndDivisible(Rnumber) 
{ 
    var remainder = new Array();  

    for (i = 0; i<= 100; i++) 
    { 
     remainder = parseInt(Rnumber[i])%2; 
    } 
    return remainder; 
} 

document.write(unevenAndDivisible()); 

Изменен

var Rnumber = new Array(); 

for (i = 0; i<= 100;i++) 
{ 
    Rnumber[i] = Math.ceil(Math.random()*101); 
// document.write(Rnumber[i] + "<br/>"); 
} 

function unevenAndDivisible(Rnumber) 
{ 
    var remainder = new Array(); 

    for (i = 0; i<= 100; i++) 
    { 
     remainder[i] = Rnumber[i]%2; 
    } 
    return remainder; 
} 
document.write(unevenAndDivisible(Rnumber)); 

но теперь я получаю результат: 0,1,0,0,1,0,0,0,1,1,0,0 , 1,0,1,1,1 ....

Я просто хочу, может быть, я попросил его неправильно в первый раз, чтобы написать неровные номера из случайного списка Rnumbers Тогда мне нужно разделить это на 7 и вернуть это.

EDIT

Allmost все проблемы ясны, спасибо всем за это. Их еще остается вопрос: В этом коде ниже он принимает только первое неравномерное значение из остатка, и я хочу, чтобы он принял все значения, которые не равны следующему оператору if, чтобы проверить% 7. Может быть, вы видите проблему лучше, если вы запустите его для youreself

var Rnumber = new Array(); 

for (i = 0; i<= 100;i++) 
{ 
    Rnumber[i] = Math.ceil(Math.random()*101); 
} 

function unevenAndDivisible() 
{ 
    var remainder = []; 
    var answer = []; 
    for (i = 0; i<= 100; i++) 
    { 
     if (Rnumber[i]%2 !== 0) 
     { 
      remainder.push(Rnumber[i]); 

      for (c = 0; c <= remainder.length;c++) 
      { 
       if (remainder[c]%7 == 0) 
       { 
        answer.push(remainder[c]); 
       } 
      }   
     } 
    } 
    return answer; 
} 

answer = unevenAndDivisible(); 
document.write(answer); 

Проблема решена, спасибо всем

+2

Ваше 'Rnumber' [отлично настроено] (http://jsfiddle.net/davidThomas/tkttD/) (в Chromium 14/Ubuntu 11.04), но вы, кажется, не передаете ожидаемый аргумент' unevenAndDivisible() ', что, вероятно, является проблемой. ** Изменить **, что вы пытаетесь достичь с помощью вызова функции? Оцените остаток * всех * чисел или просто * один * номер ..? Что-то другое? –

+0

Я редактирую свой вопрос, может быть, его более четко сейчас – JochemQuery

+0

Если у вас есть быстрый взгляд на мой ответ, я думаю, что он должен делать то, что вам нужно ... –

ответ

2

Вам не нужно проходить Rnumber функции, так как это уже доступно в рамках:

function unevenAndDivisible() 
    { 
     var remainder = []; 

     for (i = 0; i<= 100; i++) 
     { 
      if (Rnumber[i]%2 !== 0) { 
       remainder.push(Rnumber[i]); 
      } 

     } 
     return remainder; 
    } 

remainder = unevenAndDivisible(); 
console.log(remainder); 

JS Fiddle demo.


Отредактировано в ответ на вопрос из OP (в комментариях к вопрос, выше):

... может кто-нибудь объяснить, что это значит: var remainder = [];

Конечно, это массив-буквальная нотация, которая равна: var remainder = new Array();, это немного более кратким, и я предпочитаю сохранять себя набрав. Я получаю впечатление от JS Lint, когда я использую в нем var x = new Array();, что указанная выше версия обычно предпочтительнее (поскольку она жалуется на другое), но я не знаю почему.

+0

Спасибо за это объяснение. Я редактировал свой вопрос, вы можете найти ответ? – JochemQuery

+0

Обновление вашего вопроса, по-видимому, является отдельным/дополнительным вопросом само по себе. Я предлагаю удалить его из * этого * вопроса и задать отдельный вопрос полностью в отношении новой части. Но я бы предложил ссылку на этот вопрос, чтобы объяснить развитие кода и уменьшить вероятность того, что люди ошибочно попытаются закрыть-дублировать. –

+0

ОК, я делаю это после ужина :) – JochemQuery

0

1 - вы не определяет значение Rnumber, что это аргумент функции. 2 - в цикле вы определяете остаток для деления значения ранжирования и не сохраняете в массиве; попробуйте:

изменение:

remainder = parseInt(Rnumber[i])%2; 

в

remainder[i] = parseInt(Rnumber[i])%2; 
+0

Спасибо! , теперь я могу пойти дальше – JochemQuery

1

Либо передать Rnumber функции unevenAndDivisible или исключить его из списка аргументов. Поскольку это аргумент, он имеет больше локальных возможностей, чем первоначальное объявление Rnumber.

0

Ваша проблема линия

function unevenAndDivisible(Rnumber) 

Вы передаете в Rnumber в качестве аргумента, но при вызове unevenAndDivisible() вы не передавая ему это. Следовательно, для тела функции Rnumber не определено (причина не прошло ничего)

Следующий фрагмент эквивалентно тому, что вы написали над могли бы лучше объяснить

function unevenAndDivisible(xyz) 
{ 
    var remainder = new Array();  

    for (i = 0; i<= 100; i++) 
    { 
     remainder = parseInt(xyz[i])%2; 
    } 
    return remainder; 
} 

затем называется

unevenAndDivisible(undefined) 

, чтобы устранить этот аргумент из определения вызова

т.е.определить его как

function unevenAndDivisible() 
0
var array = [], 
    i = 100; 

while (i--) { 
    var random = Math.random()*i|0; 
    if(random % 2) 
     array.unshift(random); 
} 

alert(array); 
Смежные вопросы