Merkwürdige Ausgabe eines Consolen-Programms


#1

Hi, ich habe in alten Code-Beständen ein kleines Programm gefunden, das für mich nicht erklärbare Ausgaben erzeugt.

Der Code:

public class CommandCalc {
   public static void main(String[] args) {
      System.out.println(java.util.Arrays.toString(args)); //Ausgabe zur Fehleranalyse

      if(args.length == 3) {
         if(checkOperands(args)) {
            if("+".equals(args[1])) {
               System.out.println(addition(parse(args[0]), parse(args[2])));
            } else if("-".equals(args[1])) {
               System.out.println(subtraction(parse(args[0]), parse(args[2])));
            } else if("*".equals(args[1])) {
               System.out.println(multiplication(parse(args[0]), parse(args[2])));
            } else if("/".equals(args[1])) {
               System.out.println(division(parse(args[0]), parse(args[2])));
            } else {
               System.out.println("Unzulässiger Operator!");
            }
         }
      } else {
         System.out.println("CommandCalc Verwendungsbeispiel:\nCommandCalc 5 + 8");
      }
   }

   private static boolean checkOperands(String[] args) {
      return args[0].matches("\\d+") && args[2].matches("\\d+");
   }

   private static double parse(String arg) {
      return Double.parseDouble(arg);
   }

   private static double addition(double arg1, double arg2) {
      return arg1 + arg2;
   }

   private  static double subtraction(double arg1, double arg2) {
      return arg1 - arg2;
   }

   private static double multiplication(double arg1, double arg2) {
      return arg1 * arg2;
   }

   private static double division(double arg1, double arg2) {
      return arg1 / arg2;
   }
}

Das Programm macht zum Teil, was es soll. Aber wenn ich eine Multiplikation durchführen möchte, sieht die Ausgabe folgendermaßen aus:

java CommandCalc 5 * 6
[5, CommandCalc.class, CommandCalc.java, 6]
CommandCalc Verwendungsbeispiel:
CommandCalc 5 + 8

Warum werden bei Verwendung des Sterns 4 Argumente eingelesen? Wo ist das Sternchen hin? Warum werden die Dateien des Verzeichnisses, aus dem das Programm gestartet wurde, als Argumente eingesetzt? Wie kann man das Problem lösen?


#2

Also wenn ich hier in der Konsole (Mac) ein "echo * " mache, zeigt er auch die Dateien an. Mache ich aber "echo " * " " dann zeigt der den * an. Also eventuell die Argumente in “” setzen zumindestens den Operanden?


#3

In den meisten Konsolen ist der Stern ein Wildcard für Irgendwas… Nimm einfach ein “x”. Und für den Slash gilt teilweise Ähnliches (z.B. Root unter Unix-Derivaten). Da wird es schon schwieriger: Der Doppelpunkt dient teilweise zur Pfadseparation, also bliebe nur noch das Obelus-Symbol für die Division. Frag mich aber nicht, wie man dies über Tastatur eingibt.

Andererseits… + und - haben sicher auch irgendwelche Funktionen… Übergib die Aufgabe halt komplett als String. XD


#4

Ich hatte neulich auch gerätselt, warum mein Programm mit globs nicht so umgeht, wie ich es erwarte. Am Ende lag es, wie Spacerat schon bemerkte, an der Glob-Autocompletion meiner Shell.


#5

Danke euch. Bin nun im Bilde.