# Parameter an Java-Programme übergeben



## vensch (4. Apr 2009)

Hallo Leute,
ich habe mal eine Frage, und zwar belege ich dieses Semester einen Programmierkurs in Java und komme bei der einen Aufgabe nicht weiter. Blutige Anfängerin...

Folgenden Code hab ich:

[highlight=Java]public class Stars {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("*");
        System.out.println("***");
        System.out.println("*****");
        System.out.println("*******");
    }

}[/highlight]

Nun soll ich dem Programm beim Start zwei Parameter übergeben und den Code hinzufügen, der beide Parameter auf die Konsole durch Komma getrennt ausgibt.
Ich blick da grad einfach nicht durch... ???:L
Danke schon mal für die Hilfe.


----------



## SvenK (4. Apr 2009)

Programm-Parameter werden in dem Array _args_ übergeben.

Wenn du sicherstellen kannst, dass 2 Parameter übergeben werde, ist die Ausgabe ziemlich einfach (der Index in Arrays fängt immer bei 0 an)
[highlight=Java]System.out.println(args[0] + ", " + args[1])[/highlight]

Um sicher zu gehen, dass es keine ArrayIndexOutOfBounds-Exception gibt (will heisen, es wird versucht auf einen Index zuzugreifen, den es nicht gibt) und um auch eine variable Anzahl von Parametern abzudecken, kannst du folgendes versuchen
[highlight=Java]
String ausgabe;
for (int i = 0; i < args.length; i++) {
    ausgabe = args_;
    if (i < args.length) {
        ausgabe = ausgabe + ", ";
    }
    System.out.println(ausgabe);
}
[/highlight]_


----------



## Hutmacher (4. Apr 2009)

Soetwas Ähnliches hatte ich auch in meinen Thread vor, nur mit einem Parameter.

Diese Start-Methode, *public static void main(String[] args)* hat ja, wie man unschwer erkennen kann, einen Parameter. Dieses String-Array verwaltet die übergebenen Parameter. Das heißt, der erste Parameter, den Du dem Programm übergibst, ist in *args[0]*, der zweite in *args[1]* und so weiter.

[HIGHLIGHT="Java"]public class Stars
{
    public static void main(String[] args)
    {
        String parameter1 = args[0];
        String parameter2 = args[1];
    }
}[/HIGHLIGHT]

(Exceptions habe ich jetzt extra nicht berücksichtigt, da ist SvenKs Version definitiv besser)
Nun hast du die Parameter, diese kannst du jetzt überall verwenden, z.B. für die Konsole.

Aber wie übergebe ich denn dem Programm jetzt die Parameter?
Wenn du Eclipse hast, lass dir mal über File ► Export
eine Jar-File erstellen.

Diese kannst Du jetzt über cmd aufrufen und ihr Parameter übergeben.
(wir gehen davon aus, dass die File auf dem Desktop liegt)
Wir geben also ein:

```
cd Desktop
```
↑Hierdurch wechseln wir zur Desktop-Ebene

```
java -jar NameDesProgramms.jar parameter1 parameter 2
```
Bsp:

```
java -jar ParameterTestProgramm.jar hallo 50
```

[Ist jetzt mal ungestestet]


----------



## vensch (4. Apr 2009)

SvenK hat gesagt.:


> Programm-Parameter werden in dem Array _args_ übergeben.
> 
> Wenn du sicherstellen kannst, dass 2 Parameter übergeben werde, ist die Ausgabe ziemlich einfach (der Index in Arrays fängt immer bei 0 an)
> [highlight=Java]System.out.println(args[0] + ", " + args[1])[/highlight]
> ...


_

Hmmm...mir wird tatsächlich ein ArrayIndexOutOfBounds-Exception angezeigt:

*Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at Stars.main(Stars.java:14)*

Wenn ich allerdings die zweite Variante versuche, bekomme ich gar keine Ausgabe bzw. nur die, die ich ganz am Anfang schon hatte - die Zeilen mit den Sternchen. Woran mag das liegen?_


----------



## Marco13 (4. Apr 2009)

Dann übergibst du wohl keine Parameter...

```
if (args.length < 2)
{
    System.out.println("Eeeeyh, zwo Parameter angeben, aber flott!!");
    return;
}
```


----------



## SvenK (4. Apr 2009)

vensch hat gesagt.:


> Wenn ich allerdings die zweite Variante versuche, bekomme ich gar keine Ausgabe bzw. nur die, die ich ganz am Anfang schon hatte - die Zeilen mit den Sternchen. Woran mag das liegen?


Vergessen die Parameter mit anzugeben?

In deinem Fall würdest du in der Kommandozeile folgendes eingeben

```
java Stars Parameter1 Parameter2
```
Du kannst soviel Parameter angeben wie du willst, immer durch Leerzeichen voneindander getrennt.


----------



## vensch (5. Apr 2009)

Okay, so langsam bin ich hier am Verzweifeln... 
Hab am Code rumgewerkelt, versteh aber immer noch nicht so ganz, was genau ich eingeben muss, um ein ArrayIndexOutOfBounds-Exception zu verhindern...
Mein Code lautet im Moment

[highlight=Java]public static void main(String[] args) 
    {
        // 
        System.out.println("*");
        System.out.println("***");
        System.out.println("*****");
        System.out.println("*******");
      {   System.out.println("1. Parameter: " + args[0]); 
          System.out.println("2. Parameter: " + args[1]); 
          } 
      }        [/highlight]

Was mach ich falsch?


----------



## SvenK (5. Apr 2009)

codemäßig machst du nichts falsch (bis auf die {-Klammern vor und nach dem hinzugefügten System.out, die kannst du dir sparen)

Aber du bekommst bei deinem Code die ArrayIndex...., wenn du gar keine Parameter an das Programm übergibst bzw nur 1 Parameter.

Also noch einmal: 
startest du das Programm über die Kommandozeile, gibst du ein

```
java Stars Parameter1 Parameter2
```
Startest du das Programm über Eclipse, gehst du im Menü "Run" -> "Run Configurations" im folgendes Dialog zu dem Eintrag "Stars" unter "Java Applications", wechselst in den Aktenreiter "Arguments" und gibst unter "Program Arguments" deine 2 Parameter an. Dann auf Run klicken und schon läuft es. Bei Netbeans und anderem müsste dir jemand anderes sagen, wie man das einstellt

*WICHTIG!!* bei deinem Code mindestens 2 Parameter angeben


----------



## vensch (5. Apr 2009)

Aaaaaaahhhh, jetzt verstehe ich. Ich arbeite das erste mal mit Eclipse, deswegen war ich etwas verwirrt. Nun funktioniert es - ich danke dir! :toll:


----------

