2017-10-31 5 views
3

자바 스크립트를 사용하여 클래스의 요소 배경 이미지를 설정하고 있습니다. 이 코드는 대부분 작동하지만 코드를 실행할 때 정의되지 않은 변수가 있습니다. 나는 변수의 수를 얻기 위해 Math.Random()을 사용하고있다. 내 코드에서 문제 지점 (또는 적어도 내가 생각하는) : JavaScript : 배열에서 임의의 숫자를 사용하는 동안 정의되지 않은 값을 얻는 이유는 무엇입니까?

var RandomContentDiv = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 
var cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)]; 
console.log(cd); 

내가 숫자가 출력되는 것을 볼 수 console.log(cd);을 넣어. 결과는 나오지만 그 결과는 문제를 해결하는 데 유용하지 않습니다. 코드를 2 번 실행 해 보면서 내가 일반적으로 얻을 수있는 것을 보여줄 것입니다.

테스트 1 :

Number: 5 
Number: 13 
Number: 10 
Number: 1 
Number: 10 
Number: 6 
Number: 10 
Number: 3 
Number: 2 
Number: 15 
Number: 2 
Number: 3 
Number: 8 
Number: 15 
Number: 12 
Number: 7 
Number: 9 
Number: 2 
Number: 0 
Number: 8 
Number: 10 
Number: 3 
Number: 14 
Number: 13 
Number: 9 
Number: 1 
Number: 15 
Number: 13 
Number: 3 
Number: 2 
Number: 4 
Number: 14 
Number: 11 
Number: 0 
Number: 15 
Number: 7 
Number: 6 
Number: 1 
Number: 4 
Number: 7 
Number: 8 
Number: 6 
Number: 7 
Number: 4 
Number: 10 
Number: 0 
Number: 12 
Number: 11 
Number: 2 
Number: 7 
Number: 2 
Number: 11 
Number: 13 
Number: 6 
Number: 0 
Number: 5 
Number: 1 
Number: 2 
Number: 7 
Number: 8 
Number: 2 
Number: 13 
Number: 4 
Number: 3 
Number: 7 
Number: 15 
Number: 5 
Number: 1 
Number: 0 
Number: 2 
Number: 11 
Number: 8 
Number: 10 
Number: 12 
Number: 11 
Number: 1 
Number: 12 
Number: 11 
Number: 12 
Number: 0 
Number: 6 
Number: 8 
Number: 1 
Number: 11 
Number: 1 
Number: 12 
Number: undefined 

테스트 2 :

Number: 13 
Number: 2 
Number: 9 
Number: 0 
Number: 2 
Number: 0 
Number: 11 
Number: 3 
Number: 5 
Number: 3 
Number: 11 
Number: 3 
Number: 14 
Number: 15 
Number: 9 
Number: 8 
Number: 11 
Number: 12 
Number: 10 
Number: 3 
Number: 9 
Number: 0 
Number: undefined 

나는 문제는이 성명에서 오는 생각 : RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];,하지만 난 그것을 해결하는 방법을 모른다 왜냐하면 나는 JavaScript를 Math에 충분히 깊이 넣지 않았기 때문입니다. 내가 아는 누구는 반올림시 정확하지 않은 숫자를주는 Math.Round에 대해 누군가가 말했지만 (즉, 1.5는 1로 반올림 할 수 있음)이 문제에 해당한다고 생각하지 않습니다. 누군가가 문제를 일으키는 진술인지 또는 다른 것을 말할 수 있습니까?

+0

여기에 질문에 "모두"코드가 포함되어서는 안됩니다. 문제를 재현하는 가장 짧은 예제로 코드를 줄여야합니다. 즉,'Math.random (length * 1) '이 잘못되었습니다. '*'가'-'보다 우선 순위가 높으므로 조작 순서가 올바르지 않습니다. '-'앞에'-'가 오도록 괄호를 추가하여 문제를 해결하십시오. – meagar

+0

@meagar 그것은 "여기 내 모든 자바 스크립트 코드"입니다. 귀하의 솔루션을 시도해 보겠습니다. –

+0

** 모든 ** 자바 스크립트 코드가이 질문을 주제로 삼습니다. 문제는 단일 3 회선 반복으로 재현 될 수 있으며 그 회 돌이가 포함되어야합니다. 아무것도 더. – meagar

답변

1

이것은 RandomContentDiv 배열에 대한 인덱스를 계산하는 방법입니다. 당신이 제로에 가까운 콘솔에 정의되지 않은이 나오고 수 ...

cd = RandomContentDiv[Math.round(Math.random()*RandomContentDiv.length-1)];

때로는 인 Math.random()는 매우 적은 수의 제공을 얻고있는 곳

코드는 다음이있다 , 그리고 그것은 정의되지 않은 RandomContentDiv [-1]에 액세스하려고 시도하는 것으로 해석됩니다.

예의 getRandomInt 함수를 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random에서 살펴보십시오. 0과 RandomContentDiv.length-1 사이의 정수를 무작위로 선택하는 방법의 예입니다.

+0

그게 내가 문제라고 생각한거야. 그러나, 나는 부정적인 것을 꺼내려고 노력했다. 그리고 그것은 아직도 일어났다. 내 코드를 어떻게보다 정확하게 만들 수 있는지 어떻게 알 수 있습니까? –

+0

내가 참조한 예를 참조하십시오. 그것은 0에서 N-1까지의 숫자를 생성하는 법을 보여줍니다. –

+0

누군가 문제가 내 괄호라고 제안했기 때문에'cd = RandomContentDiv [Math.round (Math.random() * (RandomContentDiv.length-1))];'로 바꿨다. 당신의 대답에 그것을 넣으면 받아 들일 것입니다. –