Char-Array mit variabler Länge zurückliefern.

Status
Nicht offen für weitere Antworten.

javacat

Neues Mitglied
Hi, grüßt euch,

hab da ein keines Prog geschrieben, dessen Herz die Methode spielen() ist. Diese bekommt ein Char-Feld übergeben welches nur Kleinbuchstaben enthält. Die einzelnen Zeichen im Feld ergeben einen Satz, wobei jedem Vokal (also a, e, i, o, u) ein 'b' folgen soll und anschließend nochmal der besagte Vokal. Der so neu entstehende Satz wird in ein neues Char Feld geschrieben, dessen Referenz anschließen von der Mthode zurückgegeben werden soll. Beispiel zur Umformung:

Aus: auto ist toll
wird: abaubutobo ibist toboll

wenn ich folgenden code kompilieren will:

Code:
class Aufgabe35{

	public static void main(String [] args){
	
		char [] satz = {'a', 'b', 'o', 'r'};

		char [] neu = spielen(satz);

		for(int i = 0; i < neu.length; i++){

			System.out.println("Ausgabe: " + neu[i]);

		} //endofr	

	} //endmathod main


	public static char [] spielen(char [] satz){

		char [] neu;
		
		int n = 0;

		for (int i = 0;i < satz.length; i++){

			switch (satz[i]){
				case 'a': 
				case 'e': 
				case 'i': 
				case 'o':  
				case 'u':{ 
					neu[n++] = satz[i];
					neu[n++] = 'b';
					neu[n++] = satz[i]; 
					break; 
					}
				default : neu[n++] = satz[i];
			} //endswitch		

		} //endfor

		return neu;

	} //endmethod spielen

} //endclass Aufgabe35

erhalte ich folgenden Fehler:

Code:
Aufgabe35.java:35: variable neu might not have been initialized
                                        neu[n++] = satz[i];
                                        ^
Aufgabe35.java:40: variable neu might not have been initialized
                                default : neu[n++] = satz[i];
                                          ^
Aufgabe35.java:45: variable neu might not have been initialized
                return neu;
                       ^
3 errors

warum?

irgendwelche tollen array-methoden aus irgendwelches zusätzlichen Klassen darf ich bei der Aufgabe nicht verwenden

???
 
schon klar, doch man kann ja auch alternativ ein feld initialisieren mit:

Code:
char [] neu;

und erst aus dem Kontext ergibt sich die endgültige größe des arrays, oder?

man kann ja wohl schlecht immer von vornherein wissen wie groß ein Feld werden kann, soll, will...
 
aja, ok, dann müsste das gehen:

Code:
class Aufgabe35{

   public static void main(String [] args){
   
      char [] satz = {'a', 'b', 'o', 'r'};

      char [] neu = spielen(satz);

      for(int i = 0; i < neu.length; i++){

         System.out.println("Ausgabe: " + neu[i]);

      } //endofr   

   } //endmathod main


   public static char [] spielen(char [] satz){

      char [] neu = null;
      
      int n = 0;

      for (int i = 0;i < satz.length; i++){

         switch (satz[i]){
            case 'a':
            case 'e':
            case 'i':
            case 'o': 
            case 'u':{
               neu[n++] = satz[i];
               neu[n++] = 'b';
               neu[n++] = satz[i];
               break;
               }
            default : neu[n++] = satz[i];
         } //endswitch      

      } //endfor

      return neu;

   } //endmethod spielen

} //endclass Aufgabe35

right?
 
Nope

Arrays können nicht dynamisch gefüllt werden

--> sie haben eine initiale Grösse

für solche Sachen brauchst du etwas Collectiges (util.Collection)
 
mach doch sowas und schon weist du die länge

Code:
	   int counter=0;
	   
	   for (int i = 0;i < satz.length; i++){
		   if(Vokal){
			   counter+=3;
		   }
		   else{
			   counter++;
		   }
	   }

dann kannst du ihn auch sauber initialisieren mit
den grösse und voilà
 
dudu, keine extra-klassen!

aber die Prüfung: if (vokal) fällt eben leider nicht so kanpp aus, ich müsste dann ja noch ne switch-anweisung hinschustern, dann wirds lang. blöd, ungewollt...
 
da wirst du woll kaum drumrum kommen
ein paar if oder eine switch

wenn String erlaubt ist, machs via String ( s = s+ char else s+"b"+char+"b")
und dann

return str.toCharArray();
 
Variable Arraygrößen?

1. Array "neu" mit initialer größe anlegen
2. Wenn "neu" voll: Array "temp" mit gleicher größe anlegen
3. Inhalt von "neu" in "temp" kopieren"
4. "neu" zerstören und als größeres Array anlegen
5. Inhalt von "temp" wieder in "neu" zurückkopieren
6. weitermachen
7. das ganze natürlich wiederholend, bis "satz" abgearbeitet ist
 
Leroy42 hat gesagt.:
Das Wort initial ist hier einfach deplaziert weil es doch
geradezu suggeriert, daß es irgendwann später mal eine
andere Größe haben kann.

Nö, genauso ist es "theoretisch" auch. Es muss allerdings dazu neu erzeugt werden. Was meinst du wie java.util.ArrayList funktioniert 😀

Mit anlegen einer initialen größe war gemeint, dass man bewusst eine bestimmte Größe festlegt und nicht durch Kopie von einem gefüllten Array die größe automatisch bestimmen lässt. Fand ich irgendwie einfacher in einer Schleife unterzubringen :wink:
 
Naja, vielleicht ist's nur ein Streit um des Kaiser's Bart.

Aber zu schreiben Array mit initialer Größe anlegen schreit
doch förmlich danach, das das Array auch weitere Größen bekommen kann.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben