2014-07-17 1 views
0

내 코드의이 부분에서는 왜 테스트 클래스가 작동하지 않는지 궁금해하고있었습니다. 나는 지시 사항을 정확하게 따라 갔지만, 나는 왜 내가 나의 잘못을 얻고 있는지 확신 할 수 없다. 기본적으로 두 부분 모두에 대해 array 매개 변수가 null 인 경우 "Array is null"메시지와 함께 BadArrayException을 throw해야합니다. 배열 매개 변수의 길이가 0이면 -1을 반환해야합니다. 배열 매개 변수 내용을 변경하거나 전체 배열 매개 변수 내용을 다른 배열로 복사해서는 안됩니다. 첫 번째 어커런스를 찾으려면 배열 매개 변수를 한 번 검색해야합니다. 아무 것도 읽거나 인쇄하지 않습니다.for 루프가이 코드에서 오류를 일으키는 원인은 무엇입니까?

처음에는 intvalue = 0을 어떻게 수정해야합니까? 또는 내 for 루프에 결함이 있습니까? 또는 두 번째 루프에서 list.length로 마지막 int가 없어야합니까?

public static int indexOf(int[] list, int searchValue) throws BadArrayException 
    { 
     int indexValue = 0; 

     if(list == null) 
      throw new BadArrayException("Array is null"); 
     else if(list.length == 0) 
      return -1; 

     for(int i = 0; i < list.length; i++){ 
      if(list[i] == searchValue) 
       indexValue = i; 
     } 
     return indexValue; 
    } 

    public static int lastIndexOf(int[] list, int searchValue) throws BadArrayException 
    { 
     int indexValue = 0; 
     int last = list.length; 

     if(list.length == 0) 
      return -1; 

     for(int i = last; i >= 0; i--){ 
      if(list[i] == searchValue) 
       indexValue = i; 
     } 
     return indexValue;   
    } 
} 

내가 하죠

내 결과로이를 받고있다하지만 난 아니에요, 나는 오류가이 부분에 예상치 못한있어 점점 계속. 고맙습니다.

--- Testing indexOf and lastIndexOf method --- 

Getting indexOf of a null array 
    OK - indexOf threw exception for null array: BadArrayException: Array is null 

Getting lastIndexOf of a null array 
    OK - lastIndexOf threw exception for null array: BadArrayException: Array is null 

Getting lastIndexOf(5) of: [] 
    OK - expected lastIndexOf to return -1 and got: -1 

Getting indexOf(5) of: [5,10,5,15,5] 
    OK - expected indexOf to return 0 and got: 0 

Getting indexOf(0) of: [5,10,5,15,5] 
    OK - expected indexOf to return -1 and got: -1 

Getting indexOf(15) of: [5,10,5,15,5] 
    OK - expected indexOf to return 3 and got: 3 

그리고 여기에 내가 무엇을 얻을 대신 --- 테스트 같이 IndexOf와 lastIndexOf에서도 방법 --- 널 배열 OK의 같이 IndexOf를 얻기

- 같이 IndexOf가 null 배열에 대한 예외를 던졌다 : BadArrayException

null 배열의 lastIndexOf를 얻는 중 오류 - lastIndexOf가 예기치 않은 예외를 발생 시켰습니다 : java.lang.NullPointerException이

같이 IndexOf (5)의 방법 : [] OK - 기대 같이 IndexOf이 돌아 -1있어 : -1

이 lastIndexOf에서도 (5)의하기 : [] OK - lastIndexOf에서도 예상 반환 -1 -1

중 같이 IndexOf (20) 얻기 : 얻은 [20] OK - 0을 반환 예상 같이 IndexOf를 얻은 0

중 같이 IndexOf (25) 방법 : [20] ERROR - 예상 같이 IndexOf을 -1을 되찾았지만 얻은 값 : 0

,210

얻기 lastIndexOf에서도 (20)의 : [20] OK - 0을 반환하고있어 할 것으로 예상 lastIndexOf에서도 : 0

이의 lastIndexOf에서도 (25) 방법 : [20] 오류 - 반환 lastIndexOf에서도 예상 -1 만 가지고 : 0

이 같이 IndexOf (5)의 방법 : [5,10152010155101520] 오류 - 기대 같이 IndexOf는 0을 반환하지만 것은 가지고 : 6

가져 오는 중 indexOf (10) : [5,10152010155101520] 오류 - 1을 반환하지만 예상되는 indexOf : 7

의 같이 IndexOf (15) 얻기 6,

: [5,10152010155101520] ERROR - 2를 반환 할 것으로 예상 같이 IndexOf를 만 가지고 : 8

같이 IndexOf를 얻기 (20) : [5,10152010155101520] 오류 - 3을 반환 할 것으로 예상되는 인덱스 반환 값 : 9

indexOf (0) 가져 오기 : [5, 10152010155101520] 오류 - 예상 indexOf는 -1을 반환하지만 다음과 같이 표시됩니다. 0

다음 중 lastIndexOf (5) 가져 오기 : [5,10,15,20 , 10155101520] 오류 - 예상 lastIndexOf는 6을 반환하지만 다음과 같이 표시됩니다. 0

의 lastIndexOf에서도 (10) 방법 : [5,10152010155101520] ERROR - 7을 반환 lastIndexOf에서도 예상하지만 가지고 : 1

는 lastIndexOf에서도을 (얻기 15) of : [5,10152010155101520] 오류 - 예상 returnIndexOf가 8을 반환했지만 받았음 : 2

다음 중 lastIndexOf (20) 가져 오기 : [5 , 10152010155101520] 오류 - 예상 되는 lastIndexOf가 9를 반환하지만 다음과 같이 표시됩니다. 3

다음 중 lastIndexOf (0) 가져 오기 : [5,10,15,20 , 10155101520] ERROR - 예상되는 lastIndexOf를 retu RN -1 만이 가지고 :

완료 0 - 키를 눌러 종료 프로그램

+0

0에서 시작합니다. –

+0

당신은 우리에게 무엇이 일어나야하는지 보여주었습니다. 실제로 무슨 일이 있었습니까? – tbodt

+0

첫 번째 색인을 찾으려면 찾고있는 것을 찾으면 찾고 _ 찾으십시오. – ajb

답변

0

문제는 last 당신의 초기화이다에 키를 입력합니다.

StringSAMPLE으로 취한다. "SAMPLE".toCharArray().length의 값은 5이지만, 루프에서 "SAMPLE".toCharArray()[4]에서 "SAMPLE".toCharArray()[0]까지

즉변경

1

indexOf부터 시작하겠습니다.

검색하는 번호를 찾으면 변수에 인덱스를 저장 한 다음 완료되면 변수를 반환합니다. 의는 [5,10,5,15,5] 시험에 어떻게되는지 보자

  • 테스트 list[0] == 5합니다. 맞아, indexValue = 0.

이상적으로는 0을 반환해야합니다. 그러나 그 일은 발생하지 않습니다.

  • 테스트 list[1] == 5. 거짓, 아무것도하지 마십시오.
  • 시험 list[2] == 5. 맞아, indexValue = 2. . 거짓, 아무것도하지 마십시오.
  • 테스트 list[4] == 5. 맞아, indexValue = 4.
  • 돌아 가기 4. 아니야, 0.

결국, indexOflastIndexOf처럼 작동합니다. 값을 찾은 마지막 색인의 색인을 반환하는 대신 값을 찾자 마자 색인을 반환하십시오.

lastIndexOf에는 동일한 문제가 있지만 다른 문제가 있습니다. 즉, last을 초기화하는 방법입니다. 이제 우리는이처럼 1 요소의 배열이 있다고 가정 해 봅시다 :이 배열의

[1] 

마지막 인덱스 0이지만 1하지 0입니다 list.lengthlast를 초기화된다. (int i = last -1; i> = 0; i--) 인덱스에 대해 (int i = last; i> = 0; i--)로 변경해야합니다.

관련 문제