Addieren und ausgeben

Status
Nicht offen für weitere Antworten.
Hallo,
ich bin gerade dabei, einen kleinen Taschenrechner zu erstellen unter Eclipse. Folgendes habe ich bereits
Java:
package meinPaket;

public class Taschenrechner {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		if (args.length != 3) {
			System.out.println("Usage: Taschenrechner <Operand1> <Operator> <Operand2>");
			System.exit(-1);
		}
		Integer op1 = Integer.valueOf(args[0]);
		Integer op2 = Integer.valueOf(args[2]);
		String operator = args[1];
	}
}
op1 = 2
OP2 = 4
Operator = +
Wie krieg ich es hin, dass er mir das addiert und anschließend in der console ausgibt?
Vielen vielen Dank.
 
mit nem if-else konstrukt, bzw ne switch-case. du musst gucken, was für ein operator eingeben wurde, und entsprechend mit den operanden arbeiten
 
mit nem if-else konstrukt, bzw ne switch-case. du musst gucken, was für ein operator eingeben wurde, und entsprechend mit den operanden arbeiten

switch wird beim String schwierig... hoechstens er modelliert erstmal um...

am einfachsten und schnellsten ist dann wohl if-else
 
Java:
if(operator.equals("+")){
 ergebnis = args[0] + args[2];
}
else if(operator.equals("-")){
ergebnis = args[0] - args[2];
}
else if(operator.equals("*")){
ergebnis = args[0] * args[2];
}
else if(operator.equals("/")){
ergebnis = args[0] / args[2];
}
)

usw., falls du noch mehr funktionen zur verfügung stellen willst
 
Verwirrt mich doch nicht gleich so😀 Wäre jemand so freundlich, und könnte mir diesen if else code in meinen oben geposteten Code einfügen? Stehe gerade etwas auf dem schlauch🙁😀
 
Das stimmt natürlich, ich probiers ja auch die ganze Zeit, aber außer Fehler gibt er mir nie was aus. Habe erst gestern mit Java angefangen.
Edit: Das kommt bei mir dann, wenn ich es einfüge

Was mache ich falsch und was bedeutet die Fehlermeldung?
Danke
 
Zuletzt bearbeitet:
das if-else-zeugs kommt ans ende... sonst kennts doch die Variable "operator" doch garnicht! Also:

Java:
public static void main(String[] args) {
        if (args.length != 3) {
            System.out.println("Usage: Taschenrechner <Operand1> <Operator> <Operand2>");
            System.exit(-1);
        }
        Integer op1 = Integer.valueOf(args[0]);
        Integer op2 = Integer.valueOf(args[2]);
        String operator = args[1];
        int ergebnis = 0;
        if(operator.equals("+")){
             ergebnis = args[0] + args[2];
        }
        else if(operator.equals("-")){
             ergebnis = args[0] - args[2];
        }
        else if(operator.equals("*")){
              ergebnis = args[0] * args[2];
        }
        else if(operator.equals("/")){
              ergebnis = args[0] / args[2];
       }
       System.out.println(ergebnis);
    }
 
Ich würds mit einem switch und primitiven doubles machen, etwa so:
Java:
public static void main(String[] args) {
    if (args.length != 3 || args[1].length() != 1) {
        printUsage();
    }
    double op1 = Double.parseDouble(args[0]);
    double op2 = Double.parseDouble(args[2]);
    char operator = args[1].charAt(0);
    double result = 0;
    switch (operator) {
    case '+':
        result = op1 + op2;
        break;
    case '-':
        result = op1 - op2;
        break;
    case '*':
        result = op1 * op2;
        break;
    case '/':
        result = op1 / op2;
        break;
    case '^':
        result = Math.pow(op1, op2);
        break;
    default:
        printUsage();
    }
    System.out.println(result);
}

private static void printUsage() {
    System.err.println("Usage: Taschenrechner <operand1> [+-*/^] <operand2>");
    System.exit(-1);
}
Code:
$ Taschenrechner 16 ^ 0.5
4.0
$ Taschenrechner 123 + 7.45
130.45
 
ach....
Java:
   if (args.length != 3) {
            System.out.println("Usage: Taschenrechner <Operand1> <Operator> <Operand2>");
            System.exit(-1);
        }
        Integer op1 = Integer.valueOf(args[0]);
        Integer op2 = Integer.valueOf(args[2]);
        String operator = args[1];
        double ergebnis = 0;
        if(operator.equals("+")){
             ergebnis = op1 + op2;
        }
        else if(operator.equals("-")){
             ergebnis = op1 - op2;
        }
        else if(operator.equals("*")){
              ergebnis = op1 * op2;
        }
        else if(operator.equals("/")){
              ergebnis = (double)op1 / (double)op2;
       }
        System.out.println(ergebnis);
 
Vielen Dank an alle, bei der Version von Spi gab er mir Fehler aus, und die Version von faetzminator ist für meine Verhältnisse zu "umfangreich". Habe nun die Version von ARadauer im Einsatz. Funktioniert alles außer multiplizieren, da muss irgendwo der Wurm drin sein. Was bewirkt double? Mehrere nachkommastellen?
Das problem liegt am *, dadurch gibt er mir nur Dinge aus, die in meinem verzeichniss liegen. Wie umgehe ich dieses problem?
 
Zuletzt bearbeitet:
Das problem liegt am *, dadurch gibt er mir nur Dinge aus, die in meinem verzeichniss liegen. Wie umgehe ich dieses problem?
Er multipliziert nicht, sondern zeigt mir Datein die unter Workspace liegen. Er versteht das * irgendwie nicht als Multiplikationszeichen.
 
Ich gebe unter Arguments in Eclipse 10 * 2 ein zb. Wenn ich dann in Debugger schaue, sehe ich, wie er mir zig Dateien augibt aus meinem Workspace ordner. Wenn ich dort 10 + 2 eingebe zeigt er mir im Debugger auch nur 10 + 2 an und rechnet 12 aus.
 
Bestimmt ersetzt seine Shell beim Aufruf des Programms das * durch die Dateinamen 🙂 Schreib doch mal '*' beim Aufruf.

Edit: Hab ich wohl richtig geraten 🙂
 
weil er nun '*' auf * matchen will was nicht geht, ergo passt kein if und somit wird nix berechnet -> result bleibt 0
 
Und nun? Kann ja jetzt nicht mein Taschenrechner komplett neu machen nur wegen dem Multiplizieren.

hmm..also du könntest anstatt dem * vllt x als multiplikationszeichen benutzen 😉
ansonstne könntest du auch, in deinem if-else bzw switch-case block anstatt
operator.equals("*")
operator.equals("'*'")) benutzen und dann wie zuvor vorgeschlagen deinem programm
4 '*' 5 übergeben....

aber irgendwie ist beides nicht so schön wie ich finde 😀
 
Mal am rande,
könnte man nich einfach ein " * " als string rein geben?
Damit is das ganze vllt leichter als String zu erkennen...
 
Mal am rande,
könnte man nich einfach ein " * " als string rein geben?
Damit is das ganze vllt leichter als String zu erkennen...
Was meinst du mit "leichter als String zu erkennen"?

Also '*' sollte zumindest unter Linux mit den geläufigen Shells funktionieren, unter Windows würde ich auf \* tippen.
 
naja, ganz simpel "(Leertaste)*(Leertaste)"
damit is das erste zeichen kein * mehr un wird vllt als String genommen, nich als sonstwasfürneanweisung
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben