Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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?
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
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.
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 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.
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?
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);
}
}