# Array Problem (out of Bounds Exception)



## b0unc3 (21. Mai 2006)

Hay Leudz,

ich bin noch zimlich neu mit Java und wollte mir einen passwort Generator schreiben, muss aber leider feststellen, dass ich schon am anfang scheitere =(( .  .

Der Passwortgenerator soll erstmal nur Integer generieren (also ohne buchstaben oder so). und dann soll er diese Integer hintereinander reihen und ausgeben.

Ich hatte vor die einzelnen Integer in einem Array abzuspeichern, aber leider bekomme ich folgende Fehlermeldung:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
	at PwGenerator.<init>(PwGenerator.java:19)
	at PwGenerator.main(PwGenerator.java:31)



. . Hier der Code:


```
import java.util.*;

public class PwGenerator {
	
	//Variablen Deklarieren
	int cnt = 1;
	int[] pw = new int[9];
	
	Random rnd = new Random();
	
	PwGenerator() {
			
			while (cnt < 9) {
				
				pw[cnt] = rnd.nextInt() % 9;
				cnt++;
				
				//Wenn Zahl negativ, dann mach positiv
				if (pw[cnt] <0 ) {
					
					pw[cnt] = -1;
				}
			}
			
			System.out.println(pw[9]);
		
	}
	
	public static void main(String[] args) {
		
		PwGenerator getPw = new PwGenerator();
	}
}
```

Danke schonmal für eure Hilfe 

Ps.: Bin für jeden Vorschlag es besser oder eleganter zu machen offen ;-)


----------



## PyroPi (21. Mai 2006)

Hallo,

das Problem sind die Zeilen 16 und 25. Wenn dein aktueller Zähler cnt==8 ist, erhöhst du ihn in Zeile 16 auf 9 und beim nächsten Lesen von pw[9] erhältst du die Exception.

Wenn du dir ein Array int[] pw = new int[9] anlegst, dann sind die einzigen gültigen Indizes 0 bis 8. Alles andere gibt eine IndexOutOfBoundsException. Nicht böse sein, aber ist ein klassischer Anfängerfehler!   


Etwas eleganter geht's damit:


```
import java.util.*; 

public class PwGenerator { 
    
    int[] pw = new int[9]; 
    
    Random rnd = new Random(); 
    
    PwGenerator() { 
        for (int cnt=0; cnt<9; cnt++)
            pw[cnt] = rnd.nextInt(10);  // Zufällige Zahlen von 0 bis 9
    }

    public static void main(String[] args) { 
      PwGenerator getPw = new PwGenerator(); 
    } 
}
```


----------



## b0unc3 (22. Mai 2006)

Vielen Dank, einmal für die Hilfe und einmal für deinen Lösungsvorschlag xD

Hab noch ein Problem:

ich weiß nciht, wie ich jetzt in pw[8] alle integer von pw[0] bis pw[7] abspeichern soll, ohne das er sie zusammen addiert. . .


//EDIT:

oaky ich habs geschafft, aber mich würde mal interessieren, ob und wie man das kürzer schreiben kann xD


```
import java.util.*;

public class PwGenerator {
	
	int[] pw = new int[9];
	Random rnd = new Random();
	
	PwGenerator() {
		//Passwort generieren
		for (int cnt=0; cnt<8; cnt++) {
			pw[cnt] = rnd.nextInt(10);
		}
		String outPw;
		
		pw[8] = pw[0] + pw[1] + pw[2] + pw[3] + pw[4] + pw[5] + pw[6] + pw[7];		
		
		//Einzelne Integer in outPw abspeichern
		outPw = String.valueOf(pw[0]) + String.valueOf(pw[1]) + String.valueOf(pw[2])
				+ String.valueOf(pw[3]) + String.valueOf(pw[4]) + String.valueOf(pw[5]) 
				+ String.valueOf(pw[6]) + String.valueOf(pw[7]);
		
		//Passwort ausgeben
		System.out.println(outPw);
	}
	
	public static void main(String[] args) {
		PwGenerator gen = new PwGenerator();
	}
}
```


----------



## Murray (22. Mai 2006)

```
int sum = 0;
StringBuilder sb = new StringBuilder();
final int len = 9;
for ( int i=0; i<len; i++) {
  if ( i<(len-1)) {
    int rndNmbr = rnd.nextInt(10);
    sum += rndNmbr;
    sb.append( rndNmbr)
  } else {
    sb.append( sum);
  }
}
String outPw = sb.toString();
```


----------

