2014-11-19 3 views
0

내가 뭘하려고하면 다른 배열에서 짝수를 당기는 배열을 만드는 것입니다. 내가 올바른 방향으로 가고 있는지 확신 할 수 없다. 나는 당신이 함수/메소드와 같은 문장으로부터 돌아 오는 방법을 찾았고 무엇이든 찾을 수 없다. 가능하다면 확실하지도 않다.변수가 for 문에서 인식되지 않는 이유는 무엇입니까?

어쨌든 여기서 나는 '심볼을 찾을 수 없습니다.'아래의 'return evenArray'입니다. 이것이 무엇을 의미하는지 모르겠습니다.

public static int[] getEvenArray(int[] array) 
{   
    int dividedBy = 2; 
    int evenElement; 
    int evenCount = 0; 

    for(int i = 0; i < array.length; i++) 
    { 
     int[] evenArray; 
     evenElement = array[i] % dividedBy; 

     if(evenElement == 0) 
     { 
      evenCount++; 
     } 
     else 
     { 
      array[i] = 0; 
     } 

     evenArray = new int[evenCount]; 

     for(int x = 0; x < evenArray.length; x++) 
     { 
      if(array[i] != 0) 
      { 
       evenArray[x] = array[i]; 
      } 
     } 
    } 

    return evenArray; 
} 

이 내 강의 중 하나에서 튜토리얼입니다, 그것은 0

+0

이 코드는 C++ (자바와 비슷해 보임)가 아니거나 범위 외부의 변수에 액세스하는 것보다 훨씬 오류가 있습니다. 어쨌든, for 루프 외부에서'evenArray' 선언을 이동 시켜서 거기에 접근 할 수 있어야합니다. –

+0

동의합니다. 저는 이것이 C++이 아니라 Java 코드라고 생각합니다. –

+0

나는 곧 그 문제를 지적 해 주셔서 고맙습니다. Raphael :-) –

답변

2

evenArrayfor 루프의 범위 내에서 정의 된 최소한 :-)에게 말을 도전 조금입니다. (실제로는 그보다 조금 나빠서, 당신은 입니다. 반복 할 때마다 이전 내용을 버립니다).

따라서 for 루프 외부에 있으면 참조 할 수 없습니다.

가장 빠른 수정은이 유형에 std::vector<int>을 사용하고 함수의 시작 부분에 선언하는 것입니다. 또한 함수의 반환 유형을 동일하게 변경하십시오. 벡터의 크기를 적절히 조절하는 것을 잊지 마십시오.

가 (에 이동, 스마트 강사가 잠재적으로 그 벡터의 깊은 사본을 취할 수 이는 std::vector 반환에 대해 물어볼 것입니다. 사전 C++ (11)는 반환 값 최적화 말할 것입니다, 지금은 약 을 말할 수있다 r 값 참조 이동 생성자이 사용되므로 딥 복사가 수행되지 않습니다.

+0

나는 'int [] evenArray;를 옮겼습니다. for-loop 이전에 '초기화되지 않았습니다'라는 오류가 발생하지만 for-loop 내부에서 초기화되었습니다. 문제는 초기화가 'return evenArray;'루프의 범위 내에 있기 때문에 발생합니다. 초기화를 볼 수 없습니까? –

+0

특별히 묻지 않는 한'std :: vector'를 사용하십시오. – Bathsheba

+0

@Bathsheba : 그렇게하려면 먼저 C++로 코드를 다시 작성해야합니다. –

0

블록 내에서 선언 된 변수는 그 외부에서 볼 수 없습니다. 이 int []를 이동합니다 evenArray; 바로 기능을 시작합니다.

관련 문제