2016-11-20 5 views
0

내 클래스 메서드 중 하나의 결과는 항상 0입니다. 나는 정수 구분 때문에 일어날 수 있고, 숫자가 double 인 숫자를 캐스팅하려고 시도했지만 아직 0으로 남아 있습니다. 문제는 하단의 variance 메소드에서 발생합니다. Average method가 잘 분할되어있는 것처럼 보이기 때문에 저에게는 이상합니다.클래스 메서드를 항상 0으로 나누기

public class MyArray { 

    private int[] array; 
    private int count = 0; 
    public int length; 
    public double sum; 
    public double average; 
    public double sqSum; 
    public double variance; 

    //Constructor to instantiate a new array   
    public MyArray(int length) { 
     array = new int[length]; 
    } 

    public int length(){ 
     return array.length; 
    } 


    //getter for count 
    public int getCount(){ 
     return count; 
    } 

    //setter for count 
    public void setCount(int Count){ 
     this.count = Count; 
    } 

    //getter for integers 
    public int[] getInts(){ 
     return array; 
    } 

    //setter for integers 
    public void setInts(int counter, int input) { 
     array[counter] = input; 
    } 

    public int getArray(int position) { 
    return array[position]; 
    } 

    public void setArray(int counter, int element){ 
     array[counter] = element; 
    } 
    public int intAt(int index) { 
     return array[index]; 

    } 
    //Method to print Arrays 
    public void printArray() { 
     System.out.println("\nThe length of the array is "   
     + array.length); 

     for(int i=0; i<array.length; i++) 
      System.out.println("The array is:" + array[i]); 
    } 

//Method to check if array is sorted 
    public void isSortedArray() { 
     for(int i=0; i<array.length; i++) 
      System.out.println("The array is:" + array[i]); 
    } 

//method to calc sum 
    public double sum() { 
     for(int i=0; i<array.length;i++) 
      sum+= array[i]; 

     return (double)sum; 
    } 


    //method to calc Average 
    public double average() { 
     average =sum/array.length; 
      return (double)average; 
    } 

    //method to calc sqSum 
    public double sqSum() { 
     double sqSum = 0.0; 
     for(int i=0; i<array.length; i++) 

      sqSum = sqSum +array[i] * array[i]; 

     return (double)sqSum; 
    }  

    //method to calculate variance 
    public double variance() { 
      variance = (double)sqSum/array.length; 

      return (double)variance; 
    } 
} 
+0

:-) 먼저 테스트하지 않았다 멤버 변수? 그리고 그렇다면, 무엇? – Michael

+0

만약 내가 당신을 오해하지 않는다면, 나는이 메소드에서 sqSum에 0.0을 할당했습니다. – felipe342

+0

'sqSum' 메쏘드에 대해서 이야기하고 있다면 그것 자체의'sqSum' 변수 ('double sqSum = 0.0;')를 가지고 있습니다. 저는'MyArray' 멤버 변수'sqSum'에 대해서 이야기하고 있습니다. sqSum은 분산으로 나누려고하는 변수입니다. – Michael

답변

1

수업을 검토합니다. 아마도 문제는 호출하는 순서대로 발생했을 것입니다. 호출 sum()이 0을 반환하기 전에 average()를 호출합니다 (sum이 계산되지 않았기 때문에). 이를 피하려면 인스턴스 필드에 결과를 저장하지 말고 필요할 때마다 원래 메소드를 호출하는 것이 좋습니다. 전의. 평균 = 합계()/길이.

성능을 향상시키기 위해 결과를 캐시하려면 이보다 약간 더 복잡합니다.

public class MyArray { 

    private int[] array; 

    // Constructor to instantiate a new array 
    public MyArray(int length) { 
     array = new int[length]; 
    } 

    public int length() { 
     return array.length; 
    } 

    // getter for integers 
    public int getInts(int counter) { 
     return array[counter]; 
    } 

    // setter for integers 
    public void setInts(int counter, int input) { 
     array[counter] = input; 
    } 

    // getter for entire array 
    public int[] getArray() { 
     return array; 
    } 

    // setter for entire array 
    public void setArray(int[] newArray) { 
     this.array = newArray; 
    } 

    public int intAt(int index) { 
     return array[index]; 
    } 

    // Method to print Arrays 
    public void printArray() { 
     System.out.println("\nThe length of the array is " + array.length); 

     for (int i = 0; i < array.length; i++) 
      System.out.println("array[" + i + "] = " + array[i]); 
    } 

    // Method to check if array is sorted 
    public boolean isSortedArray() { 
     boolean isSorted = true; 
     for (int i = 1; i < array.length; i++) 
      if (array[i] > array[i-1]) { 
       isSorted = false; 
       break; 
      } 
     System.out.println("The array is " + (isSorted ? "sorted" : "not sorted")); 
     return isSorted; 
    } 

    // method to calc sum 
    public long sum() { 
     long sum = 0L; 
     for (int i = 0; i < array.length; i++) 
      sum += array[i]; 
     return sum; 
    } 

    // method to calc Average 
    public double average() { 
     return (double) sum()/array.length; 
    } 

    // method to calc sqSum 
    public long sqSum() { 
     long sqSum = 0L; 
     for (int i = 0; i < array.length; i++) 
      sqSum += array[i] * array[i]; 
     return sqSum; 
    } 

    // method to calculate variance 
    public double variance() { 
     return (double) sqSum()/array.length; 
    } 
} 

면책 조항 : 여기에

은 몇 가지 변경 클래스 나는 당신이 이제까지`sqSum`에 값을 할당 한 실행, 그래서

+0

와우. 고마워. 원래 방법을 호출하는 것이 모두 필요했습니다. 제 분류 코드를 연마 해 주셔서 감사합니다. – felipe342