2017-04-06 1 views
1

이 프로그램은 객체 작성 및 클래스 정의를 연습하는 프로그램입니다. 나는 합리적인 수업으로 작성된 여러 가지 방법과 메인 수업에서 작성한 나의 수업을 가지고 있습니다. 모든 메소드가 main에서 올바르게 호출되지만, add 및 reduce 메소드를 호출하면 메소드를 찾을 수 없다는 오류가 발생합니다. 나는 오류를 받고있는 아래의 행에 주석을 달았습니다. 여기 숫자를 조작하는 Java 프로그램 예기치 않은 오류

내 합리적인 클래스 :

package main; 


public class rational { 
    int numerator, denominator; 
    public rational() { 
     this.numerator = 0; 
     this.denominator = 0; 

    } 

    public static void printRational(rational tester) { 
     System.out.println(tester.numerator + "/" + tester.denominator); 
    } 

    public rational(int n, int d) { 
     this.numerator = n; 
     this.denominator = d; 
    } 

    public static void negate(rational tester) { 
     tester.numerator = tester.numerator * -1; 
     if(tester.denominator <= 0) { 
      tester.numerator = tester.numerator * -1; 
      tester.denominator = tester.denominator * -1;} 
     } 
     public static void invert(rational tester) { 
      int tempN = tester.numerator; 
      int tempD = tester.denominator; 

      tester.numerator = tempD; 
      tester.denominator = tempN; 
     } 
     public static double toDouble(rational tester) { 
      double retval = (double)tester.numerator/(double)tester.denominator; 
      return retval; 
     } 

     public static void reduce(rational tester) { 
      int remain, num1, num2; 
      num1 = tester.numerator; 
      num2 = tester.denominator; 
      remain = num1 % num2; 
      while(remain != 0) { 
       remain = num1 % num2 ; 
       num1 = num2; 
       num2 = remain; 
      } 
      int GCD = num1; 

      rational ret = new rational(tester.numerator/GCD, tester.denominator/GCD); 

      printRational(ret); 
     } 

     //Step 11 Write a method called add that takes two rational numbers as arguments and returns a new rational object. The return object should contain the sum of the arguments. 
     public static rational add(rational tester, rational testAdd) { 
      rational retAdd = new rational(0, 0); 
      if(tester.denominator == testAdd.denominator) { 
       retAdd.numerator = tester.numerator + testAdd.numerator; 
       retAdd.denominator = tester.denominator; 
       return retAdd; 
      } else { 
       retAdd.numerator = tester.numerator * testAdd.denominator; 
       retAdd.denominator = tester.denominator * testAdd.denominator; 

       testAdd.numerator = testAdd.numerator * tester.denominator; 
       testAdd.denominator = testAdd.denominator * tester.denominator; 

       retAdd.numerator += testAdd.numerator; 

       int remain, num1, num2; 
       num1 = retAdd.numerator; 
       num2 = retAdd.denominator; 
       remain = num1 % num2; 
       while(remain != 0) { 
        remain = num1 % num2 ; 
        num1 = num2; 
        num2 = remain; 
       } 
       int GCD = num1; 

       retAdd.numerator = retAdd.numerator/GCD; 
       retAdd.denominator = retAdd.denominator/GCD; 

       return retAdd; 
      } 
     } 
    } 
} 

그리고 여기 내 주요 클래스는 다른 파일에 있습니다

package main; 

import static main.rational.toDouble; 

public class Main { 

    public static void main(String[] args) { 

     rational tester = new rational(); 
     tester.numerator=4; 
     tester.denominator=3; 

     rational testAdd = new rational(5, 7);  

     rational.printRational(tester); 

     rational.negate(tester); 
     rational.printRational(tester); 

     rational.invert(tester); 
     rational.printRational(tester); 

     double doubleValue = toDouble(tester); 
     System.out.println(doubleValue); 

     reduce(tester); //ERROR HERE 

     printRational(add(tester, testAdd)); //ERROR HERE 
    } 
} 
+1

대문자로 시작해야하는 클래스 이름에 대한 명명 규칙을 따르십시오. – abcOfJavaAndCPP

+1

rational.reduce (tester)로 함수를 호출해야합니다. redduce()뿐만 아니라 같은 클래스에서 정적 메서드에 대한 reduce, compiler 검색을 호출 할 때 –

+0

@ user7790438 위대한, 감사합니다! –

답변

1

당신은 정적, reduce처럼, 어떤 다른 사람 (당신의 클래스 Rational 이름을 지정해야하므로, BTW, 자바 클래스 traditionally가 대문자로) rational에서 toDouble 방법을 가져가 아닌 것 클래스 이름.

rational.reduce(tester);Main 클래스 상단에 import static main.rational.reduce;을 추가하는 것과 같이 작동합니다.

0

만 가져 '정적 main.rational.toDouble'INT 클래스 메인이 방법 올바르지 않습니다. 가져 오기 static으로 변경 가능합니다. com.syoka.test1.rational. *; 당신이 그들을 앞에 추가하지 않고 그들을 호출 할 수