Problem mit "ArrayIndexOutOfBoundsException"

Bekomme immer diese Fehlermeldung, wenn ich mein Programm ausführen möchte:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at Calculator.main(Calculator.java:3)

Hier ist mein Code, wollte einen einfachen Taschenrechner programmieren:

public class Calculator {
public static void main(String[] args) {
int zahl1 = Integer.parseInt(args[0]);
int zahl2 = Integer.parseInt(args[1]);
int ergebnis = zahl1 + zahl2;
String operation = args[2];


if (operation.equals("+")) {
System.out.println(ergebnis);

} else if (operation.equals("-")) {
System.out.println(zahl1 - zahl2);
} else {
System.out.println("Ihre Eingabe ist falsch.");
}
}
}
 
Dein Programm erwartet drei Parameter beim Aufruf. Wenn Du diese nicht übergibst, dann bekommst Du die erwähnte Exception.
Die ersten zwei Parameter müssen zudem eine Zahl sein und das dritte ein + oder ein -.
 
wie schreibe ich das dann genau?

int zahl1 = 1 = Integer.parseInt(args[0]);
int zahl2 = 2 = Integer.parseInt(args[1]);

String operation = + = args[2];

Oder wie?
 
Nein, der Code ist ok, nur eben musst Du beim Aufruf Parameter angeben.

Also etwas wie:
java Calculator 7 34 +
 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
Dies ist eine Laufzeit-Exception. Beim Ausführen hat er eine ArrayIndexOutOfBoundsException bekommen.

Was genau rufst Du auf / machst Du? Evtl. hast Du ein aktuelles Java und du rufst nicht den java compiler (javac) auf sondern direkt java. Das ist eine neue Funktionalität die (ich glaube mit Java 11) gekommen ist: Du kannst auch direkt auf der Java Datei das java aufrufen:
java Calculator.java
Das würde nicht nur übersetzen sondern auch ausführen. Also entweder erst übersetzen:
javac Calculator.java

Oder den Aufruf so lassen und die Parameter hinzu fügen:
java Calculator.java 7 34 +
 
Ok, dann zu Deinem Verständnis: Mit dem javac Aufruf übersetzt Du die Calculator.java Datei und es entsteht die Calculator.class Datei.

Mit dem zweiten Aufruf startest Du das Programm. Da das Programm aber 3 Parameter erwartet, musst Du die noch angeben. Also zwei Zahlen und dann ein String müssen angegeben werden.
 
Das heißt ich muss, bevor ich das Programm starte, die Parameter eingeben.

Habe jetzt folgendes gemacht

javac Calculator.java

Parameter eingegeben: 2

bash: 2: command not found
 
Basis von Kommandozeilenaufrufen:
Es kommt immer erst der Befehl. Das ist hier javac bzw. java
Zu dem Befehl kann mann dann Parameter mitgeben. Beim Übersetzen hast Du den Parameter "Calculator.java" mitgegeben.
Beim Ausführen hast Du den Parameter "Calculator" mitgegeben.

Das waren die bisherigen Aufrufe. Generell kannst Du da aber noch deutlich mehr mitgeben. Eine Übersicht kannst Du bekommen, wenn Du einmal ausführst:
java -h

Und da bekommst Du dann als erstes etwas wie:
Java:
~ % java -h
Verwendung: java [Optionen] <mainclass> [args...]
           (zur Ausführung einer Klasse)
und natürlich noch ganz viel mehr ... Das Wichtige erkennst Du aber:
Du hast zum einen Optionen, die du vor der Klasse angeben kannst (und die im folgenden Text auch erläutert werden) und zum anderen hast Du diese [args...]
Dieses [args...] bezeichnet die Argumente, die dann an das Java Programm weiter gegeben werden und dann in dem String Array zu finden sind.

Daher war relativ früh ein erstes Beispiel:
java Calculator 7 34 +
java ist der Befehl, der ausgeführt werden soll.
Es sind keine Optionen angegeben worden
Calculator ist die mainclass
Und args sind die 7, die 34 und das +.
 

Zurück
Oben