2010-05-22 2 views
2

저는 초보 컴퓨터 과학 고등학생이며 약간의 코드 스 니펫이 있습니다. 기본적으로, 내 코드는 정수 배열로 기본 CLI 검색을 수행해야합니다. 그러나, 무한 루프 (BlueJ, 내가 사용하고있는 컴파일러가 멈추고 기계를 재설정해야 함)로 보이는 것을 얻을 수 있습니다. 나는 브레이크 포인트를 설정했다. 그러나 나는 여전히 문제를 알지 못한다. (나는 심지어 나에게 말해주는 대부분의 것을 이해하지 못한다.)숫자 검색을위한 매우 간단한 코드는 무한 루프를 제공합니다.

다음은 잘못된 코드이다 ("ArrayUtil" 그 이유는 무엇입니까?) :

import java.util.Scanner; 
public class intSearch 
{ 
    public static void main(String[] args) 
    { 
     search(); 
    } 

    public static void search() 
    { 
     int[] randomArray = ArrayUtil.randomIntArray(20, 100); 
     Scanner searchInput = new Scanner(System.in); 
     int searchInt = searchInput.nextInt(); 
     if (findNumber(randomArray, searchInt) == -1) 
     { 
      System.out.println("Error"); 
     }else System.out.println("Searched Number: " + findNumber(randomArray, searchInt)); 
    } 

    private static int findNumber(int[] searchedArray, int searchTerm) 
    { 
     for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++) 
     { 
      return i; 
     } 
     return -1; 
    } 
} 

이것은 지금 저를 괴롭 히고 있습니다. 문제를 식별하는 데 도움이됩니다!

+1

당신은 searchedArray [i] == searchTerm 대신에 searchedArray [i]! = searchTerm을 의미합니까? 나는이 방법으로 findNumber가 실제로 발전하지 않는다고 생각한다. – abenthy

답변

1

내가 수입이 없습니다 (클래스 ArrayUtil 무엇인지 모른다 내 Netbeans 사용). int [] randomArray = {1, 2, 3, 5, 7, 10, 1, 5}; 행을 사용하여 해당 행을 변경하려고 할 때; 그것은 완벽하게 작동합니다.

그리고 루프 상태를 변경해야합니다. 왜 그런지 알려주지는 않을 것이지만 배열로 시도하면 곧 버그가 보일 것입니다. 당신이 그것을 본 후에, 당신은 그것을 고칠 수 있습니다 :)

+0

나는 ArrayUtil이 잘못되었다고 의심했기 때문에 나는 그것과 같은 보통의 배열로 시도했다. 그러나 같은 문제.내 BlueJ가 어떻게 든 망쳐 놓았다고 생각하기 시작한 ... – Joshua

+0

그럴 경우 netbeans http://netbeans.org/을 사용해 보았습니다. 때로는 blueJ가 문제가있어 상용 프로젝트에 사용되지 않습니다. – vodkhang

+0

다른 컴파일러로 시도 할 것입니다. 제안을 주셔서 감사합니다, 왜냐하면 내 코드가 완벽하게 괜찮아 보였기 때문에 이상하게 보였습니다 (이제는 if 문으로 수정 된 루프 제외). – Joshua

3

무한 루프에 대해서는 잘 모르지만 다음 코드는 의도 한대로 작동하지 않습니다. i++ 그래서 i 항상 값을 갖게됩니다 도달하지 않을 수 0

for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++) 
{ 
    return i; 
} 
return -1; 

당신은 아마이 말은 :

for (int i = 0; i < searchedArray.length; i++) 
{ 
    if (searchedArray[i] == searchTerm) 
    { 
     return i; 
    } 
} 
return -1; 
+0

제 스타일은 학생에게 버그를 보여주고 다음 버그를 수정하려고 시도합니다. 어쨌든, 그것은 당신에게 달렸습니다 :) – vodkhang

+0

네, 어떻게 대답 할 수 있겠습니까? 그는 여기에 스타일이 있습니다! 그냥 @vodkhang 농담, 나는 당신의 스타일을 주셔서 감사합니다. – RandyMorris

+0

+1 뻔뻔스러운 스타일의 무시. = p –

0

여기에 4 가지 기본적인 문제가 있습니다.
앞에 searchedArray[i] == searchTerm을 넣으면 범위를 벗어나는 예외가 발생할 수 있습니다. 항상 그런 종류의 코드를 방지해야합니다.
2. 귀하의 의도와 귀하의 의도가 다른 것 같습니다. 메소드 이름은 검색 용어를 찾는 것을 의미합니다. 그러나 코드에서 검색 용어를 찾을 수 없을 때까지 루프 스캔을 계속하려는 경우에도 루프가 해당 검색을 수행하지는 않습니다. "for this; do that"을 "while do that"라고 생각하십시오.
3. "검색"의 시작 부분에 중단 점을 놓습니다. 그런 다음 작은 배열을 사용하여 디버거와 함께 한 줄씩 코드를 단계별로 실행하고 변수를 봅니다. 그들은 거짓말을하지 않습니다. 그들은 무슨 일이 일어나는지 정확히 알려줄 것입니다.
4. Eclipse 및 Sun의 JDK 6 또는 7과 같은 표준 IDE 및 컴파일러를 사용하십시오. JDK 7을 사용하는 Eclipse는 위에서 설명한 것처럼 이상한 "무한 루프"를 나타내지 않는 심각한 조합입니다.

관련 문제