2013-02-24 2 views
-1

나는 이것을 실행 해 보았지만 circleCounter 만 출력하면 0 만 출력됩니다. 하단의 테스터 기능 아래에 카운터 코드를 넣으면 작동합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 내가 뭔가를 놓치고 있니? 그것의 경우왜 내 카운터가 작동하지 않습니까? Java

public class Project1 { 
    public int circleCounter; // Number of non-singular circles in the file. 
    public int posFirstLast; // Indicates whether the first and last circles overlap or not. 
    public double maxArea;  // Area of the largest circle (by area). 
    public double minArea;  // Area of the smallest circle (by area). 
    public double averageArea; // Average area of the circles. 
    public double stdArea;  // Standard deviation of area of the circles. 
    public double medArea;  // Median of the area. 
    public int stamp = 189375; 

    public Project1() { 
     // This method is complete. 
    } 


    public void results(String fileName) { 
     MaInput F1 = new MaInput("DataFile.data"); 
     double x, y, rad; 
     int circleCounter = 0; 
     double sumArea = 0; 
     Circle A = new Circle(); 

     while (!F1.atEOF()) { 
      x = F1.readDouble(); 
      y = F1.readDouble(); 
      rad = F1.readDouble(); 

      circleCounter++; 

      if (A.area() > maxArea) { 
       maxArea = A.area(); 
      } 

      if (A.area() < minArea) { 
       minArea = A.area(); 
      } 

      sumArea += A.area(); 
      averageArea = sumArea/circleCounter; 

      stdArea = Math.sqrt((Math.pow(A.area() - averageArea, 2)/circleCounter)); 

      //Array for points 
      Circle[] points = new Circle[circleCounter]; 
      for (int j = 0; j < points.length; j++) { 
       if (rad > Point.GEOMTOL) { 
        points[j] = A; 
       } 
      } 

      posFirstLast = points[1].overlap(points[points.length]); 

      //Array of areas 
      double[] areas = new double[circleCounter]; 
      for (int i = 0; i < areas.length; i++) { 
       if (rad > Point.GEOMTOL) { 
        areas[i] = A.area(); 
       } 
      } 

      //Bubble Sort 
      for (int i = 0; i < areas.length; i++) { 
       if (areas[i + 1] < areas[i]) { 
        double temp = areas[i + 1]; 
        areas[i + 1] = areas[i]; 
        areas[i] = temp; 
       } 
      } 

      //Median 
      if (areas.length % 2 == 0) { 
       medArea = (0/5) * (areas[(areas.length/2) - 1] + areas[areas.length/2]); 
      } else { 
       medArea = (0.5) * (areas[((areas.length) - 1)/2]); 
      } 

     } 
    } 

    public static void main(String args[]) { 

     Project1 pleasework = new Project1(); 
     System.out.println("Number of (non-singular) circles: " + pleasework.circleCounter); 
     System.out.println("Whether the first and last circles overlap: " + pleasework.posFirstLast); 
     System.out.println("Maximum Area: " + pleasework.maxArea); 
     System.out.println("Minimum Area: " + pleasework.minArea); 
     System.out.println("Average Area: " + pleasework.averageArea); 
     System.out.println("Standard deviation of the areas: " + pleasework.stdArea); 
     System.out.println("Median of the areas: " + pleasework.medArea); 
    } 
} 
+4

어떤 부분이 작동하지 않습니까? 이는 한번에 모두를 소비하는 많은 코드이며, 어느 부분이 문제를 일으키는지를 좁히면 자신과 우리 모두를 더 쉽게 만들 수 있습니다. – Makoto

+0

그것은 컴파일되지만 ... 내 카운터는 0을 반환합니다 – Seth

+0

어느 카운터가 0을 반환합니까? –

답변

2

그래서, 스틸 당신에게 공을주고 circleCounter을, 당신은 당신의 변수를 그림자 알고 있어야합니다.

private int circleCounter = 0;은 전역 범위에 적용 할 수 있습니다.

int circleCounter = 0;은 방법 results의 로컬 범위에 적용 할 수 있습니다. 가장 로컬 범위가 변수보다 우선하므로이 변수를 여기서 다시 선언하여 전역 변수를 숨 깁니다.

단순히 선언을하면 변수가 음영 처리되지 않습니다.

편집 : 이것은 또한 실제로 으로 전화를 거는 것으로 추정됩니다.

2

코드의 main이 results() 메소드를 호출하지 않으므로 필드의 모든 기본값이 0 또는 0.0 (double의 경우) 으로 콘솔에 인쇄됩니다. java는 유일한 진입 점입니다 귀하의 프로그램에서.

+0

그래서'pleasework.results (...) '와 같은 것이 필요할 것입니까? 괄호 안에 무엇이 있을까요? – Seth

+0

문자열 값을 프로그램에서 사용하지 않고 모든 값을 전역 값에 할당 할 수 있습니다. 동일한 값을 가진 전역 값에 로컬 값을 할당하면 변경 사항을 볼 수 있습니다. 변수는 범위에서 전역 변수보다 우선합니다. – AnkDasCo

관련 문제