2011-11-27 4 views
1

나는 왜이 코드가 작동하지 않는지 이해할 수 없다. 사용자가 지정한 빈도로 주어진 x 간격에 걸쳐 모든 점에서 다항식을 계산하는 함수를 작성 중입니다. 내 기본 다항식 코드는 문제의 무의미합니다. 내 문제는 Horner의 방법에서 얻은 값으로 배열을 채우는 것입니다. double의 배열 초기화하기 자바

public double[] evalAt(double s, double f, int n) { 
    double[] resultArray = new double[n]; 
    double h =((f - s)/(n)); 
    if(s==f) { 
     double tempResult = 0; 
     for (int i = this.degree; i >= 0; i--) { 
      tempResult = tempResult * s + this.terms[i].getCoefficient(); 
     } 
     resultArray[0] = tempResult; 
    } else { 
     int counter = 0; 
     for(double i = s; i <= f; i=i+h) { 
      double tempResult = 0; 
      for (int j = this.degree; j >= 0; j--) { 
       tempResult = tempResult * i + this.terms[j].getCoefficient(); 
      } 
      System.out.println("Counter: " + counter + " Result @ Counter: " + tempResult); 
      resultArray[counter++] = tempResult; 
     } 
     System.out.println(resultArray[0]); 
     System.out.println(resultArray[1]); 
     System.out.println(resultArray[2]); 
     System.out.println(resultArray[3]); 
    } 
    return resultArray; 
} 

나는 카운터의 값과 임시 결과가 무엇인지 보여줘 거기에 print 문이있다. 그런 다음 구문은 resultArray['index'] = 'value';입니다. 내가 이걸 실행할 때 카운터와 값이 정확히 내가 원하는 것임을 알았지 만, 하단에있는 네 개의 print 문으로 배열을 검사하면 아무 일도 일어나지 않습니다. 내 입력은 0,10,10 다음과 같습니다

출력 :

Counter: 0 Result @ Counter: 0.0 
Counter: 1 Result @ Counter: 1.0 
Counter: 2 Result @ Counter: 4.0 
Counter: 3 Result @ Counter: 9.0 
Counter: 4 Result @ Counter: 16.0 
Counter: 5 Result @ Counter: 25.0 
Counter: 6 Result @ Counter: 36.0 
Counter: 7 Result @ Counter: 49.0 
Counter: 8 Result @ Counter: 64.0 
Counter: 9 Result @ Counter: 81.0 
Counter: 10 Result @ Counter: 100.0 
+1

들여 쓰기를 수정하고 다시 보지 않으시겠습니까? 제 짐작은 괄호가 당신이 생각하는대로하지 않는다는 것입니다. – user949300

+0

다시 컴파일 해보십시오. – Max

+0

신속한 답변을 주셔서 감사하지만 어느 솔루션도 작동하지 않았습니다. – user1068366

답변

3

이 메서드 외부에서 삼키고있는 ArrayIndexOutOfBoundsException을 던지고 있다고 생각됩니다.

크기가 n 인이 경우 10이지만이 카운터는 0에서 f (또한 10)까지 총 11 개의 요소로 구성됩니다. 그래서 그 중 적어도 하나에 오프 by이 있습니다.

코드를 들여다 보면서

catch (Exception e) { 
} 

을 말한다 비트를 찾아 더 쉽게 이런 종류의 오류를 잡을 수 있도록

catch (Exception e) { 
    e.printStackTrace(); 
} 

로 변경.

+0

나는 프로그램의 다른 곳에서 예외를 처리하고 있었고, 실제로 예외 범위 밖의 배열이었습니다 ... 모두에게 고마워요! – user1068366

+0

n = 1 인 정신 검사를하십시오. 처음과 끝에서 두 가지 결과를 원합니다. resultArray []는 1이 아닌 2로 치수가 지정되어야합니다. 따라서 두 번째 줄은 [n + 1]이어야합니다. – user949300

1

불행하게도 나는이 구체적인 답변을하지 않습니다하지만 확인 것처럼 아직 의견을 게시하고 코드를 실행하고 나를 위해 잘 실행 할 수 없습니다. 고정 된 계수와 차수를 대입하면 브라켓 팅이 모두 훌륭하다는 것을 알 수 있으며 내부 범위에서 resultArray 변수를 재 초기화 할 수 없다는 것을 알 수 있습니다.

문제가있는 코드를 직접 복사하여 붙여 넣기합니까?

일반적으로 이와 같은 문제가있는 경우 할당과는 관계가 없지만 실제로 'resultsArray'는 실제로 할당 된 두 개의 다른 변수이지만 다형성 때문에 오류가 발생하지 않습니다.

+0

예, 이것은 직접 복사하여 붙여 넣기입니다. 내가 카운터 0 대신에 '0'으로 서브하면, 0 번째 요소에서 마지막 tempResult (루프 끝까지 겹쳐 씀)를 얻습니다. 그런 다음 다른 모든 요소는 그 내용으로 0.0을 표시합니다. 빠른 답변 감사합니다! – user1068366

+0

당신은 환영합니다 :) 당신이 "아무 일도 일어나지 않는다"라고 말한 게시물에서 resultArray 내용을 인쇄 할 때 정확히 무엇을보고 있습니까? 우리는 아무것도 인쇄되지 않았거나 가치가 잘못되었다는 것을 의미합니까? – AntonyM

+0

출력이 전혀 없으면 try {} catch (Throwable x) {x.printStackTrace();에서 전체 메서드 내용을 래핑해야한다고 말하고 싶습니다. } 아마도 (아마도) ArrayIndexOutOfBoundsException을 가져올 수 있지만 그것을 잡아서 어딘가에서 인쇄하지 않을 것이라고 생각하기 때문에? – AntonyM