Array mit Zufallszahlen von einem Wuerfel

Pupsicat

Mitglied
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:

Java:
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!
 
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
 
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.
 
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...
 
Zunächst mal:
Java:
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.
 
Ich habe jetzt folgendes:

Java:
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?
 
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:

Java:
    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.
 
Siehe mein Posting:
Java:
...
else {
    aktSerie = 1;
...
Du musst ja das erste Auftreten einer anderen Zahl auch mitzählen.

so hab jetzt folgendes:

Java:
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);
	  
	  
  }
}
 
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?
 
So Danke für eure Hilfe!!!

Hier mein fertiges Programm:

Java:
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);
	  
	  
  }
}
 

Neue Themen


Zurück
Oben