# Array mit Zufallszahlen von einem Wuerfel



## Pupsicat (23. Nov 2010)

Hallo Leute,

Programmiere gerade an einem Array "Wuerfel[101]". DIeser enthält 100 Zufallszahlen {1,..,6}.
Dabei muss ich mir die längste darin enthaltene Serie z.B. 1,2,2,2,2,5 (Serie = Anzahl der gleichen aufeinander folgenden Zahlen)ausgeben, mir die Stelle, z.B. an der 45 Stelle beginnt diese Serie, merken und die Zahl um die es sich handelt ausgeben.

Mein bisheriger Code:


```
public class test{
  public static void main(String a[]){

	  int[] wuerfe = new int [101];
	  int aktzahl;
	  int stelle;
	  int serie=1;
	  
	  for (int i=1;i<wuerfe.length;++i){
		  wuerfe[i]=(int) (Math.random() *6 +1);
		  System.out.print("["+wuerfe[i]+"]"+" ");
		  if(i%10 == 0)
			  System.out.println("");
	  }
	  
	  for(int i=1;i<wuerfe.length-1;i++){
		  if(wuerfe[i] == wuerfe[i+1]){
			  stelle= i;
			  serie++;
			  
		  }else {
			  stelle =0;
		  
		  }
	  }
	  
	  
	  
	  
  }
}
```

Ich habe jetzt bei der abfrage in der 2 for- SChleife ein Problem.
WIe frage ich da am Geschicktesten ab?

Bitte nur hinweise!


----------



## MySelV (23. Nov 2010)

Hi,

dann erstmal eine Frage, die als Hinweis gedacht ist: Wieso hast du eine Abneigung gegen das 1. Feld eines Arrays?

Ansonsten: Es sind noch ein paar Hilfsvariablen notwendig. Mach es auf einem Papier mal - schreib die Variablen auf. Ist zwar eine saumäßig aufwendige Arbeit, aber es hilft, alle Variablen zu finden. Stichwort: Zwischenergebnis

So .. vielleicht hilft es ja.

Grüße


----------



## Pupsicat (23. Nov 2010)

Das erste Arrayfeld fehlt, weil es mir leichter fiel umzudenken.
Das mit dem Blatt versuch ich jetzt mal!


----------



## Final_Striker (23. Nov 2010)

Du musst dir die längste und die aktuelle Serie merken. Wenn die aktuelle Serie größer als die längste ist, kannst du längste Serie = aktuelle Serie setzen.


----------



## MySelV (23. Nov 2010)

DA hat jemand nicht bis zu Ende gelesen. Ziel war es, dass er allein drauf kommt. Er wollte nur Hinweise und keine Lösung! Mannoman...


----------



## Michael... (23. Nov 2010)

Zunächst mal:

```
if (...)
    serie++;
else {
    //hier merken falls bisher längste Serie
    stelle = i;
    serie = 1;
}
```

Und dann musst Dir die bisher längste Serie und deren Stelle merken.
Probleme kannst Du mir einer Serie am Ende bekommen, da der letzte Wert nicht mitgezählt wird.


----------



## Pupsicat (23. Nov 2010)

Ich habe jetzt folgendes:


```
for(int i=1;i<wuerfe.length-1;i++){
		  if(wuerfe[i] == wuerfe[i+1]){
			  aktzahl=wuerfe[i];
			  aktSerie++;
			  if(aktSerie > lSerie){
				  lSerie=aktSerie;
				  stelle=i;
			  }
			  
			  
		  }else {
			aktSerie=0;
		  
		  }
		  
	  }
	  
	  System.out.println("Laengste Serie"+lSerie);
```

Wieso bekomm ich bei der Anzahl der Serie einen zu wenig angezeigt?


----------



## Chumax (23. Nov 2010)

weil ein array bei 0 startet du fängst bei 1 an


----------



## Pupsicat (23. Nov 2010)

Versteh nich was es damit zu tun hat.:bahnhof:


----------



## Landei (23. Nov 2010)

Ich würde vorschlagen, die längste Serie in zwei Schritten mit einem zusätzlichen Hilfsarray zu suchen. Es mag kürzere Möglichkeiten geben, aber diese ist sehr einfach nachzuvollziehen:


```
public static void main(String a[]){

      java.util.Random random = new java.util.Random();

      int[] wuerfe = new int [100];

      for (int i=0; i<wuerfe.length; i++){
          wuerfe[i]= random.nextInt(6) + 1;
          System.out.print("["+wuerfe[i]+"] ");
          if(i%10 == 9) {
              System.out.println();
          }
      }

      int[] laenge = new int[wuerfe.length];
      for(int i=0; i<wuerfe.length; i++){
          if(i > 0 &&  wuerfe[i] == wuerfe[i-1]){
              laenge[i] = laenge[i-1] + 1;
          }else {
              laenge[i] = 1;
          }
      }

      int maxLaenge = -1;
      int maxIndex = -1;
      for(int i=0; i<wuerfe.length; i++){
          if(laenge[i] > maxLaenge) {
              maxLaenge = laenge[i];
              maxIndex = i - maxLaenge + 1;
          }
      }

      System.out.println(); 
      System.out.print("Maximale Serienlänge " + maxLaenge);
      System.out.print(" an Index " + maxIndex);
      System.out.println(" mit der Augenzahl " + wuerfe[maxIndex]);
  }
```

Dabei zählt das laenge-Array einfach immer eins weiter, wenn noch ein "gleicher" Wurf gefunden wird, ansonsten beginnt die Serie wieder mit eins. Wenn man also die Würfe [1,*3,3,3*,5,*6,6,6,6*,2,2] hat, ergibt sich ein laenge-Array [1,*1,2,3*,1,*1,2,3,4*,1,2]

Dann durchsucht man dieses laenge-Array einfach nach der größten Serien-Länge.


----------



## Michael... (23. Nov 2010)

Pupsicat hat gesagt.:


> Wieso bekomm ich bei der Anzahl der Serie einen zu wenig angezeigt?


Siehe mein Posting:

```
...
else {
    aktSerie = 1;
...
```
Du musst ja das erste Auftreten einer anderen Zahl auch mitzählen.


----------



## Pupsicat (24. Nov 2010)

Michael... hat gesagt.:


> Siehe mein Posting:
> 
> ```
> ...
> ...



so hab jetzt folgendes:


```
public class test{
  public static void main(String a[]){

	  int[] wuerfe = new int [101];
	  int aktzahl=0;
	  int stelle=0;
	  int aktSerie=1;
	  int lSerie=1;
	  
	  for (int i=1;i<wuerfe.length;++i){
		  wuerfe[i]=(int) (Math.random() *6 +1);
		  System.out.print("["+wuerfe[i]+"]"+" ");
		  if(i%10 == 0)
			  System.out.println("");
	  }
	  
	  for(int i=1;i<wuerfe.length-1;i++){
		  if(wuerfe[i] == wuerfe[i+1]){
			  aktzahl=wuerfe[i];
			  ++aktSerie;
			  if(aktSerie > lSerie){
				  lSerie=aktSerie;
				  stelle=i-aktSerie+2;
			  }
			  
			  
		  }else {
			aktSerie=1;
		  
		  }
		  
	  }
	  
	  System.out.println("Laengste Serie: "+lSerie+", Augenzahl: "+aktzahl+", an der Stelle"+stelle);
	  
	  
  }
}
```


----------



## Pupsicat (24. Nov 2010)

Er erkennt nur nicht immer die richtige Augenzahl.
Und die Berechnung für die Stelle ist auch confuse aber richtig.
Hat jemand da einen besseren Vorschlag?


----------



## Landei (24. Nov 2010)

Hatte ich oben schon gepostet...


----------



## Pupsicat (24. Nov 2010)

Landei hat gesagt.:


> Hatte ich oben schon gepostet...



deine Berechnung ist genauso wie meine.
nur mit +1 kommst du da nicht weiter muss +2 sein.
Dann sind alle Werte richtig!


----------



## Pupsicat (24. Nov 2010)

So Danke für eure Hilfe!!!

Hier mein fertiges Programm:


```
public class test{
  public static void main(String a[]){

	  int[] wuerfe = new int [101];
	  int aktzahl=0;
	  int stelle=0;
	  int aktSerie=1;
	  int lSerie=1;
	  
	  for (int i=1;i<wuerfe.length;++i){
		  wuerfe[i]=(int) (Math.random() *6 +1);
		  System.out.print("["+wuerfe[i]+"]"+" ");
		  if(i%10 == 0)
			  System.out.println("");
	  }
	  
	  for(int i=1;i<wuerfe.length-1;i++){
		  if(wuerfe[i] == wuerfe[i+1]){
			  ++aktSerie;
			  if(aktSerie > lSerie){
				  lSerie=aktSerie;
				  stelle=i-aktSerie+2;
				  aktzahl=wuerfe[i];
			  }  
		  }else {
			aktSerie=1;
		  }
		  
	  }
	  
	  System.out.println("Laengste Serie: "+lSerie+", Augenzahl: "+aktzahl+", an der Stelle "+stelle);
	  
	  
  }
}
```


----------

