2014-03-19 5 views
1

나는 해커 런크에서 counting sort1 문제를 해결하고 있었다. JavaScript를 사용하여 문제를 해결하고 있습니다.입력 배열 요소가 자바 스크립트에서 정수로 모두 구문 분석되면 런타임 오류가 발생하는 이유는 무엇입니까?

표준 입력은 숫자와 내가 내 솔루션의 거의 모든 코드 위에 사용 된이

var inp = input.split('\n') 

var n = parseInt(inp[0]); //Number of elements 
var ar = inp[1].split(' ').map(function(item){ 
    return parseInt(item); 
}); //Array of numbers. 

처럼 읽고 있었다 배열을 제공하고, 항상 일했다. 그런 다음 위의 배열 arfor 루프에서 처리합니다.이 루프는 테스트 케이스 중 하나 (마지막 테스트 케이스)에서 런타임 오류를 발생시킵니다.

for(var i = 0; i < n; i++) { 
    var number = ar[i]; 
    //more code 
} 

하지만지도 기능을 사용하여 배열의 요소를 분석하지만, 하나, 루프 나중에 하나를 구문 분석하지 않는 경우에, 나는 어떤 오류가 발생하지 않습니다.

var ar = in[1].split(' '); //Array of numbers in string format 

for(var i = 0; i < n; i++) { 
    var number = parseInt(ar[i]); 
    //more code 
} 

누구나 설명 할 수있는 이유는 무엇입니까?

+0

사례를 독립 실행 형 실행 파일 스 니펫으로 포장 할 수 있습니까? 오류는 무엇입니까? – sabof

+0

마지막 스 니펫이 작동합니까? –

+0

@gaurang 예. 두 번째 스 니펫이 작동합니다. – kushdilip

답변

0

in은 키워드이며 변수로 사용하려고합니다. 나는 이것이 왜 실제로는 파싱 오류이기 때문에 "Runtime Error"라고 말하는 지 잘 모르겠다. 일단 다른 이름으로 변경되면 처음 두 단락을 오류없이 실행할 수 있습니다.

+0

사실'in'이 아닌'inp'를 변수 이름으로 사용하고 있습니다. 질문을 업데이트했습니다. – kushdilip

+0

@kushdilip 그리고 내가 말했듯이, 나는 더 이상 당신의 실수를 재현 할 수 없다. – sabof

0

Hackerrank에서 .split() 메서드가 빈 문자열 ("")을 배열의 마지막 요소로 사용했다는 것을 기억하는 유일한 문제. 아마도 그것이 당신이 마지막 테스트 케이스에서 실패한 이유 일 것입니다. 는 예약 키워드이므로 또한

if(arr[i] !== "") 
    // perform operations 
else 
    break; 

, 당신이 식별자로 in을 사용할 수 없습니다

는 논리처럼합니다.

+1

'.split()'이 문제가 아니라고 생각합니다 ... 코드는'.map()'을 제거한 후에 작동합니다. 실제로'inp'를'in'이 아닌 변수 이름으로 사용하고있었습니다. 질문을 업데이트했습니다. – kushdilip

+0

@kushdilip 이상합니다. 코드에'console.log'를 더 추가하고 자신의 샘플 테스트 중 일부를 사용하여 로컬로 실행하십시오. 어쩌면, 당신의 코드가 뭔가를 처리 할 수 ​​없기 때문에 런타임 오류가 발생했습니다. ReferenceErrors의 일부 이름은 [여기에 있습니다.] (http://msdn.microsoft.com/en-us/library/1dk3k160(v=v294.aspx) –

+0

@ gaurang. 로컬로 테스트 해 보겠습니다. – kushdilip