Al compilar un programa java desde cmd, aparece el "error: no se puede encontrar el símbolo", pero no en Eclipse

Esben86

Estoy tratando de hacer una calculadora para realizar operaciones aritméticas con números racionales. Para esto tengo una Rationalclase. El programa debe ejecutarse desde la línea de comandos con argumentos:

java (...) operador num / denom (+ -. /) num / denom

Parece que se obtiene un error de compilación al crear instancias de la Rationalclase, y esto sucede cuando intento compilar desde cmd. No obtengo este error al compilar en Eclipse. El mainmétodo con la lógica de la calculadora es un poco complicado en este momento, así que pegaré un ejemplo de una clase de prueba donde estoy creando algunas instancias de Rational. También pegaré el código para Rational.

Método de prueba a continuación:

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);

    }

}

La Rationalclase:

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;
    }

}

El mensaje de error tiene este aspecto:

TestRational.java:7: error: cannot find symbol
Rational r1 = new Rational(1, 2)
^
symbol: class Rational
location: class TestRational

Recibo un mensaje de error por cada aparición de la palabra racional, con un "^" apuntando hacia la "R".

He leído esta publicación, pero no he podido resolver el problema: enlace

¿Alguien puede ver qué está causando el error y por qué solo se produce al compilar el programa para la línea de comandos?

Amit Garg

Generalmente, este error se produce cuando el compilador no puede encontrar otro archivo java que esté utilizando en su programa.

Una posible razón puede ser la siguiente: ha guardado su archivo con cualquier otro nombre en lugar de Rational.java. El compilador dará este error cuando no se encuentre el mismo nombre de clase. Solución: cambie el nombre de la clase y vuelva a compilar.

En segundo lugar, cuando usa la declaración del paquete en la parte superior de su clase y cumple su clase sin el interruptor "-d".

Solución: compile su archivo java usando "javac -d E: \ TestRational.java Rational.java"

¿Qué hace "-d"

Enlace: http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html
-d directorio Establece el directorio de destino para los archivos de clase. El directorio ya debe existir; javac no lo creará. Si una clase es parte de un paquete, javac coloca el archivo de clase en un subdirectorio que refleja el nombre del paquete, creando directorios según sea necesario. Por ejemplo, si especifica -d C: \ myclasses y la clase se llama com.mypackage.MyClass, entonces el archivo de clase se llama C: \ myclasses \ com \ mypackage \ MyClass.class. Si no se especifica -d, javac coloca cada archivo de clase en el mismo directorio que el archivo fuente desde el que se generó.

Nota: El directorio especificado por -d no se agrega automáticamente a su ruta de clase de usuario.

Mientras compilamos nuestro archivo java usando el comando javac sin el modificador '-d', el compilador crea un paquete temporal, compila su clase, guarda el archivo de clase en su directorio actual y elimina el paquete

Que pasa en tu caso:

Cuando compila su archivo TestRational.java, el compilador crea un paquete temporal e intenta encontrar Rational.java en ese paquete y cuando el compilador no puede encontrar esa clase, la compilación muestra este error.

cuando usa eclipse IDE, eclipse tome todas estas cosas usando una herramienta de compilación como ant / maven, para que no obtenga este tipo de error allí.

Si Rational.java está en un paquete diferente, compílelo usando -d y luego TestRational.java usando el siguiente comando javac -cp locationOfRationalClass -d locationOfNewPackage TestRational.java

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo