2011-09-27 4 views
0

자바에서 검색 알고리즘을 제대로 작동 시키려면 약간 어렵습니다. 기본적으로이 프로그램은 초기화 된 배열을 가지고 있습니다. 사용자는 키보드를 통해 숫자를 입력해야하며, Java는이 번호가있는 모든 색인을 인쇄합니다. 내 주요 문제는 내가 다음과 같이 현재 보이는 메소드를 생성하고자하는 사실에있다 :검색 알고리즘 - Java

public static int[] linsearch(int[] numbers, int key) { 
     int[] indexvalues = null; 
     int n = 0; 
     for (int i = 0; i < numbers.length; i++) { 
      if (numbers[i] == key) { 
       indexvalues[n] = i; 
       n++;} 
     } 

     return indexvalues; 
    } 

이 뒤에 아이디어는 것을 배열을 제공하고있다 ("키"로 식별이 경우) 수, 프로그램은 숫자 "키"가 원래 배열에서 발견되는 인덱스가 저장되는 새로운 배열을 생성합니다. 현재이 오류 메시지가 나타납니다 : java.lang.NullPointerException. 이 배열을 초기화하는 데 다른 접근법을 시도했지만 지금까지 아무 것도 성공하지 못했습니다. 따라서, 어떤 도움을 매우 극명하게 될 것입니다!

+3

이것은 이야기가 아닌 질문입니다. 최소한의 실패한 예제가있는 지점으로 디버그하십시오. –

+0

확인. 나는 나의 질문을 짧게했다. – Kristian

+0

입력 해 주셔서 감사합니다. 미안하지만 아직 프로그래밍에 익숙하지 않은 (2 개월 전부터 시작된) 매우 신기한 일이기 때문에 제 질문은 때때로이 사이트의 다른 모든 사람들처럼 우아하지 않을 때 저를 용서해주십시오. – Kristian

답변

3

주요 어려움은 출력 배열의 크기를 미리 알지 못하기 때문에 발생합니다. 반면에 필요에 따라 Java 배열을 확장하는 것은 가능하지만 불쾌합니다.

해결 방법에는 여러 가지가 있습니다. 내가 당신이라면

, 나는 인덱스를 저장하는 컬렉션을 사용하십시오 :

public static Collection<Integer> linsearch(int[] numbers, int key) { 
    ArrayList<Integer> indexvalues = new ArrayList<Integer>(); 
    for (int i = 0; i < numbers.length; i++) { 
     if (numbers[i] == key) { 
      indexvalues.add(i); 
     } 
    } 
    return indexvalues; 
} 

당신은 그에 따라 호출 코드를 수정해야합니다. 나는 이것을 독자를위한 운동으로 남겨 둔다.