이 프로그램은 객체 작성 및 클래스 정의를 연습하는 프로그램입니다. 나는 합리적인 수업으로 작성된 여러 가지 방법과 메인 수업에서 작성한 나의 수업을 가지고 있습니다. 모든 메소드가 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
}
}
대문자로 시작해야하는 클래스 이름에 대한 명명 규칙을 따르십시오. – abcOfJavaAndCPP
rational.reduce (tester)로 함수를 호출해야합니다. redduce()뿐만 아니라 같은 클래스에서 정적 메서드에 대한 reduce, compiler 검색을 호출 할 때 –
@ user7790438 위대한, 감사합니다! –