Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Juanma91 en 7 Noviembre 2013, 23:07 pm



Título: Duda Apache Commons CLI
Publicado por: Juanma91 en 7 Noviembre 2013, 23:07 pm
Hola compañeros, tengo una duda que no sé como resolverla:

Código:
usage: Vista.CalculadoraCLIVista
 -resta                  Calcula la resta dos operandos
 -suma             Calcula la suma dos operandosl


¿ Cómo puedo "decirle" que el args[0] equivale a resta,suma..etc?

Lo estoy haciendo con el patron MVC y el código de la vista lo tengo así , pero no estoy muy convencido que este bien..

Código:
public void realizarOperacion(String[] args,double x, double y) {
       
        // para poder pasarle el options al parser
        Options options = mostrarOpciones();

        CommandLineParser parser = new BasicParser();
        CommandLine cmd = null;
        try {
            cmd = parser.parse(options, args);
        } catch (ParseException ex) {
            Logger.getLogger(CalculadoraCLIVista.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (cmd == null) {
            System.err.println("No se cargo bien el parseador de la linea de comandos");

            System.exit(-1);
        }

        if (cmd.hasOption("h") || cmd.getOptions().length == 0) {
            new HelpFormatter().printHelp(CalculadoraCLIVista.class.getCanonicalName(), options);
            return;
        }

        if (cmd.hasOption("suma")) {
            // leer los dos argumentos , convertirlos a double y realizar operacion.
           
        // "x" seria el primer operando que se le pasa," y" el segundo.
            x = Double.parseDouble(args[1]);
            y = Double.parseDouble(args[2]);
            controlador.sumar(x, y);
        }
}

  .. de tal manera que yo ponga  sumar 1 2 y la línea de comandos me devuelva 3.. :S


Título: Re: Duda Apache Commons CLI
Publicado por: ThinkByYourself en 8 Noviembre 2013, 15:16 pm
Para saber si es "suma", "resta", "multiplica", "divide" el primer argumento pasado al programa puedes hacer:
Código
  1. if(args[0].equals("suma")) {...}
  2. else if(args[0].equals("resta")) {...}
  3. else if(args[0].equals("multiplica")) {...}
  4. else if(args[0].equals("divide")) {...}
  5.  
Si utilizas el operador lógico "==" puede no servirte cuando quieres comparar el contenido del objeto en sí mismo, porque Java lo que haría, usándolo con objetos (y los argumentos del programa son objetos de tipo String), sería comparar los punteros de los dos objetos, y eso puede variar, pues la JVM tiene sus propios algoritmos para hacer más eficiente el manejo de la RAM de sus programas. Por tanto, con objetos lo suyo es "objeto0.equals(objeto1)" y con tipos primitivos "primitivo0==primitivo1".
El segundo y tercer argumento tendrías que accederlos con "args[1]" y "args[2]".
Y sobre todo, esos argumentos se pasan al método de ejecución, que siempre es "public static void main(String[]args){...}", por lo cual tendrás que manejarlos partiendo de que se pasan como parámetros primeramente a este método, luego ya puedes recogerlos desde donde quieras y hacer lo que quieras.
Si buscas encuentras!
Un saludo!