Ich versuche, einen Rechner zu machen, um arithmetische Operationen auf rationalen Zahlen vorzufixieren. Dafür habe ich eine Rational
Klasse. Das Programm sollte mit args von Kommandozeile ausgeführt werden:Beim Kompilieren eines Java-Programms von cmd bekomme ich "Fehler: kann Symbol nicht finden", aber nicht in Eclipse
java (...) num/denom Operator (+ - /.) Num/denom
Es ist wie ein einen Übersetzungsfehler zu bekommen scheint, wenn Instanzen der Schaffung Rational
Klasse, und das passiert, wenn ich versuche, von cmd zu kompilieren. Ich bekomme diesen Fehler beim Kompilieren in Eclipse nicht. Die main
Methode mit der Rechnerlogik ist im Moment ein wenig unordentlich, daher werde ich ein Beispiel aus einer Testklasse einfügen, wo ich einige Instanzen von Rational erstelle. Ich werde auch den Code für Rational
einfügen.
Prüfverfahren unter:
public class TestRational {
public static void main(String[] args) {
Rational r1 = new Rational(1, 2);
Rational r2 = new Rational(1, 2);
Rational result = new Rational();
result = r1.add(r2);
System.out.println("r1 + r2 = " + result);
}
}
Die Rational
Klasse:
public class Rational extends Number implements Comparable<Rational> {
private long numerator = 0;
private long denominator = 1;
private long[] r = new long[2];
// numerator: r[0]
// denominator: r[1]
public Rational() {
this(0, 1);
}
public Rational(long numerator, long denominator) {
long gcd = gcd(numerator, denominator);
this.r[0] = ((denominator > 0) ? 1 : -1) * numerator/gcd;
this.r[1] = Math.abs(denominator)/gcd;
}
private static long gcd(long n, long d) {
long n1 = Math.abs(n);
long n2 = Math.abs(d);
int gcd = 1;
for (int k = 1; k <= n1 && k <= n2; k++) {
if (n1 % k == 0 && n2 % k == 0)
gcd = k;
}
return gcd;
}
public long getNumerator() {
return r[0];
}
public long getDenominator() {
return r[1];
}
public Rational add(Rational secondRational) {
long n = r[0] * secondRational.getDenominator()
+ r[1] * secondRational.getNumerator();
long d = r[1] * secondRational.getDenominator();
return new Rational(n, d);
}
public Rational subtract(Rational secondRational) {
long n = r[0] * secondRational.getDenominator()
- r[1] * secondRational.getNumerator();
long d = r[1] * secondRational.getDenominator();
return new Rational(n, d);
}
public Rational multiply(Rational secondRational) {
long n = r[0] * secondRational.getNumerator();
long d = r[1] * secondRational.getDenominator();
return new Rational(n, d);
}
public Rational divide(Rational secondRational) {
long n = r[0] * secondRational.getDenominator();
long d = r[1] * secondRational.getNumerator();
return new Rational(n, d);
}
@Override
public String toString() {
if (r[1] == 1)
return r[0] + "";
else
return r[0] + "/" + r[1];
}
@Override
public boolean equals(Object other) {
return (((this.subtract((Rational)(other))).getNumerator() == 0));
}
@Override
public int intValue() {
return (int)doubleValue();
}
@Override
public float floatValue() {
return (float)doubleValue();
}
@Override
public double doubleValue() {
return r[0] * 1.0/r[1];
}
@Override
public long longValue() {
return (long)doubleValue();
}
@Override
public int compareTo(Rational o) {
if (this.subtract(o).getNumerator() > 0)
return 1;
else if (this.subtract(o).getNumerator() < 0)
return -1;
else
return 0;
}
}
Die Fehlermeldung sieht wie folgt aus:
TestRational.java:7: error: cannot find symbol
Rational r1 = new Rational(1, 2)
^
symbol: class Rational
location: class TestRational
Ich erhalte eine Fehlermeldung für jedes Auftreten der Rationales Wort, mit einem "^" gegen das "R".
Ich habe diesen Beitrag gelesen haben, aber nicht in der Lage, das Problem zu lösen: link
Kann jemand sehen, was den Fehler verursacht, und warum ist es nur verursacht, wenn für die commandlinde das Programm zusammenzustellen?
Sind specifing Sie die Classpath? http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html – m0skit0
* wenn ich versuche, von cmd * zu kompilieren - Weil Sie alle Klassen zusammen kompilieren müssen. Ein Build Tool wie Ant/Maven/Gradle hilft dabei. –
@ m0skit0: Ich habe den Klassenpfad wie in der Standardanleitung angegeben eingestellt, wenn ich JDE/JDK/Eclipse installiere. – Esben86