# Kommandozeilenparameter



## evil (13. Dez 2009)

Hallo, ich mal wieder.

Ich möchte gern 2 Wörter bzw. Zahlen über die Kommandozeile einlesen, und diese dann miteinander verknüpfen.
Also geb ich zum Beispiel "java Programmname 1234 hallo" in die Kommandozeile ein und es soll "1h2a3l4lo" ausgegeben werden. Also immer abwechselnd.

Gibt es dort irgendeine Anweisung, wie dies gemacht werden kann? 
Klar ist mir, dass ich dort eine Rekursion anwenden muss. 

Vielen Dank.
Evil


----------



## eRaaaa (13. Dez 2009)

wandel die strings in ein char array um, und durchlaufe diese.


```
char[] c1 = "1234".toCharArray();
	char[] c2 = "hallo".toCharArray();
```


```
for (int i = 0; i < c1.length; i++) {
	    System.out.print(c1[i]+""+c2[i]);
	}
```

musst du noch ei nwenig anpassen (hallo ist ja länger als 1234)..aber so an sich würd ichs machen 

/edit: oder einfach charAt bneutzen *g*


----------



## evil (13. Dez 2009)

1234 und hallo waren nur ein Beispiel. Die Wörter variiren immer und werden vom Nutzer selber in die Kommandozeile eingegeben.
Also kann ich in deinem Beispiel "1234" einfach durch den Namen meines Strings ersetzen? Wobei ich nun nicht weiß, wie ich der Methode sage, dass sie mit dem ersten Wort/Zahl arbeiten soll. Vielleicht mit args[0]?

charAt klingt gut. Kann ich da irgendwie sagen, dass er Zeichen weitergehen soll? Weil ich ja nie weiß, wie lang das Wort/die Zahl sein wird..


----------



## eRaaaa (13. Dez 2009)

wenn so das string array in deiner main methode heißt, dann ja


----------



## evil (13. Dez 2009)

Mh, ich glaub ich brauch da doch mehr Hilfe.

Ich hab das nun mal so angefangen, lieg da aber wahrscheinlich ziemlich falsch.


```
class Kombination {

	public static void main (String[] args) {
		Out.println(wort());		//Methode word ausgeben
	}
	
	static String wort(String s, String t) {
		char[] a = s.toCharArray();	//String s in einen Char-Array umwandeln
		char[] b = t.toCharArray();
		for (int i = 0; i < a.length; i++) {	//Jeden Buchstaben des Strings ablaufen
			return a;		// Zurück zum Array und mit dem nächsten Buchstaben weiter machen
		}	
	}
}
```


----------



## Gastredner (13. Dez 2009)

Die bei Programstart übergebenen Programmargumente sind im String-Array "args" der main-Methode zu finden:

```
public static void main(String[] args) {
	if (args.length == 2) {
		// Hier die Operation vornehmen.
	} else {
		System.out.println("Falsche Anzahl von Argumenten!");
		System.out.println("Benutzung: java Programm Wort1 Wort2");
	}
}
```


----------



## evil (13. Dez 2009)

Ich kann das leider nicht in einer einzigen Main-Methode schreiben, es muss in einer *rekursiven* Methode geschrieben werden.


----------



## eRaaaa (13. Dez 2009)

ach, mir fällt im moment auch nix tolles ein ;(

```
static void wort(String s, String t) {
	int i = 0;
	for (i = 0; i < Math.min(s.length(), t.length()); i++) {
	    System.out.print(s.charAt(i) + "" + t.charAt(i));
	}
	if (s.length() > i) {
	    System.out.print(s.substring(i, s.length()));
	}
	else if (t.length() > i) {
	    System.out.print(t.substring(i, t.length()));
	}
    }
```

so vllt? ;(


----------



## Gastredner (13. Dez 2009)

evil hat gesagt.:


> Ich kann das leider nicht in einer einzigen Main-Methode schreiben, es muss in einer *rekursiven* Methode geschrieben werden.


Dann setzt du an die entsprechende Stelle in der main-Methode halt einfach den ersten Aufruf der rekusiven Methode - so, wie du es schon einmal geschrieben hattest:

```
System.out.println(wort(args[0], args[1]);
```
Müsste dann natürlich noch auf die korrekte Signatur der Methode und deren Rückgabewert angepasst werden.


----------



## evil (13. Dez 2009)

Die if-Anweisung brauch ich nicht zu beachten, da es sich immer um 2 Wörter bzw Zahlen handelt. Nun hatte ich ja meinen Code gepostet und die return-Anweisung scheint ja völlig falsch zu sein (meldet mir der Compiler), das mit Out.println(wort(args[0] + args[1])); funktioniert auch nicht. Außerdem weiß ich nicht, wie ich das 2. Wort/Zahl verarbeiten soll.


----------



## eRaaaa (13. Dez 2009)

ach so ein bisschen eigeninitiative wäre doch nicht schlecht 

(zumal meine lösung eh nicht die tollste ist)

```
public static void main(String[] args) {
	System.out.println(wort(args[0], args[1]));
    }

    static String wort(String s, String t) {
	StringBuilder sb = new StringBuilder();
	int i = 0;
	for (i = 0; i < Math.min(s.length(), t.length()); i++) {
	    sb.append(s.charAt(i) + "" + t.charAt(i));
	}
	if (s.length() > i) {
	    sb.append(s.substring(i, s.length()));
	} else if (t.length() > i) {
	    sb.append(t.substring(i, t.length()));
	}
	return sb.toString();
    }
```

und deine argumentation, wieso du die if, anweisung nicht brauchst, versteh ich nicht ?!
(und das 2. wort wird hier doch "verarbeitet") 
oder bin ich heute so von der rolle, dass ich deine frage nicht verstehe?


----------



## evil (13. Dez 2009)

Ich würde gern Eigeninitiative mit einbringen. Leider hab ich im Kopf diesen "Plan", was das Programm machen soll, nur leider fehlt mir diese Erfahrung, um das alles so ins Programm mit einzubauen, wie ich das gern hätte  

Und warum ich die if-Anweisung nicht beachten muss, ist, weil mir vorgegeben wird, dass ich auf jeden Fall nur 2 Zeichenreihen zum verarbeiten hab 

Eine Frage habe ich noch, was macht dieses Math.min genau?


----------



## eRaaaa (13. Dez 2009)

evil hat gesagt.:


> Und warum ich die if-Anweisung nicht beachten muss, ist, weil mir vorgegeben wird, dass ich auf jeden Fall nur 2 Zeichenreihen zum verarbeiten hab


schon klar, aber das hat doch mit der if anweisung nichts zu tun? die ist ja nur dafür da, dass wenn ein wort länger als das andere ist, die restlichen buchstaben noch angehängt werden!



> Eine Frage habe ich noch, was macht dieses Math.min genau?



ermittelt von 2 zahlen die kleinere(hier also die länge der strings)


----------



## evil (13. Dez 2009)

Achso, ich dachte es prüft, wie viele Wörter eingegeben werden.. Tut mir leid..

Vielen Dank für die Hilfe!


----------



## eRaaaa (13. Dez 2009)

ne, das wäre [c]args.length[/c]


----------



## evil (13. Dez 2009)

oh.. Danke!


----------

