# Zufällige Buchstaben in char-Array



## Guest (29. Mrz 2006)

Guten Morgen!!! 

Könnte mir bitte jemand einen kleinen Denkanstoß geben, wie ich es schaffe, eine Reihe (100 Elemente im char-Array) zufälliger Buchstaben (von a bis z) zu generieren??? Hab' bereits in anderen Foren und im Internet gesucht, aber ich finde nur die Generierung von Zufallszahlen....  Versuch' ich das Ganze einfach in "char" umzuwandeln, klappt's nicht....  :cry: 

Vielen, vielen Dank für eure Hilfe!!!! 



```
public static void main(String[] args) { 
   char[]zufall = new char[100]; 
   for (int j=0; j<zufall.length; j++) { 
   zufall[j] = (char) ('a' + 23*Math.random());  //????????????? 
   Out.println("Die Zufallszahl ist: " + zufall); 
      } 
}
```


----------



## Murray (29. Mrz 2006)

Funktioniert doch schon ganz gut, Du darfst allerdings in der Ausgabe nicht das ganze Array (zufall) sondern nur das aktuelle Element (zufall[j]) ausgeben:

```
public static void main(String[] args) {
   char[]zufall = new char[100];
   for (int j=0; j<zufall.length; j++) {
     zufall[j] = (char) ('a' + 23*Math.random());  //?????????????
     Out.println("Die Zufallszahl ist: " + zufall[j]);
   }
}
```

Allerdings deckst Du damit nicht den gesamten Wertebereich ab: random liefert ja Werte, die immer kleiner sind als 1.0; daher liefert der Ausdruck (int)(23*Math.random()) Werte zwischen 0 und 22. Wenn Du also auch mal ein z sehen willst, solltest Du schreiben:

```
public static void main(String[] args) {
   char[]zufall = new char[100];
   for (int j=0; j<zufall.length; j++) {
     zufall[j] = (char) ('a' + 24*Math.random());  // 'a' + (0..23) = ('a' .. 'z')
     Out.println("Die Zufallszahl ist: " + zufall[j]);
   }
}
```


----------



## norman (29. Mrz 2006)

Murray hat gesagt.:
			
		

> Allerdings deckst Du damit nicht den gesamten Wertebereich ab: random liefert ja Werte, die immer kleiner sind als 1.0; daher liefert der Ausdruck (int)(23*Math.random()) Werte zwischen 0 und 22. Wenn Du also auch mal ein z sehen willst, solltest Du schreiben:
> 
> ```
> public static void main(String[] args) {
> ...


hat das alphabet nicht 26 buchstaben?
(char) 'a' + 23 sollte doch ein x liefern..
außerdem ist 24*Math.random() nicht ein Wert zw. 0 und 23 sondern zw. 0 und 24
  :autsch:   :autsch: 
 :arrow: 
	
	
	
	





```
zufall[j] = (char) ('a' + 25*Math.random());  // 'a' + (0..25) = ('a' .. 'z')
```


----------



## Guest (29. Mrz 2006)

Hey, danke ihr zwei!!!
Jetzt klappt's!!


----------



## Murray (29. Mrz 2006)

norman hat gesagt.:
			
		

> hat das alphabet nicht 26 buchstaben?
> (char) 'a' + 23 sollte doch ein x liefern..


Logisch, war wohl noch zu früh für mich  



			
				norman hat gesagt.:
			
		

> außerdem ist 24*Math.random() nicht ein Wert zw. 0 und 23 sondern zw. 0 und 24


Das sehe ich weiterhin anders: Math.random() ist immer kleiner als 1.0, daher ist 24 * random immer kleiner als 24.0. Da beim impliziten Cast der double nicht gerundet, sondern abgeschnitten wird, ergibt sich also ein Wert zwischen 0 und 23.

Also:

```
zufall[j] = (char) ('a' + 26*Math.random());  // 'a' + (0..25) = ('a' .. 'z')
```


----------



## norman (29. Mrz 2006)

okay, 1:1 :wink:


----------



## millinär (20. Dez 2006)

hmm ich benutz den code auch mal oder gibts irgendwelche einwände?


----------



## millinär (20. Dez 2006)

bzw weil es mir egal ist was für nen buchstaben ich bekomme
mach ich das so:

```
public static String getzufalstring(int size){
        Random r=new Random();
        
        StringBuffer zufall=new StringBuffer();
        for (int i = 0; i < size; i++) {
            zufall.append((char) (r.nextInt(255)));
        }
 return zufall.toString();
    }
```

oder ist das blöd kann man das noch besser machen?


----------



## SlaterB (20. Dez 2006)

verwende in Java 1.5 standardmäßig StringBuilder, 
der ist schneller als StringBuffer aber nicht synchronisiert


----------



## millinär (22. Dez 2006)

aso THX guter tipp schon wieder was gelernt


----------

