fehler nach letzter zahl

  • Themenstarter Themenstarter das p
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
D

das p

Gast
sers!

bin grad dabei ein lotto zu programmieren. ohne großen schnickschnack einfach 6 zahlen - fertig 😉
nachdem ich die letzte, also sechste zahl eingegeben habe, kommt eine fehlermeldung:

Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
	at startUp.LottoTest2.auswerten(LottoTest2.java:57)
	at startUp.LottoTest2.main(LottoTest2.java:71)

mein quelltext sieht so aus:

Code:
package startUp;

import java.io.*;

public class LottoTest2 {
	
	int [] Zahlen = new int[6];
	int [] rzahl = new int[6];
	int richtige, j, i, a;
	static int richtigezahlen=0;
	double flag, Zahl;

	
	/* Zahlen generieren */
	public void zahlengenerieren(){
		for(i=1; i<=6; i++){
			Zahl = (Math.random()* 48)+1;	
		}
		
	}
	
	/* Schaut nach doppelten Zahlen */
	public void doppelteZahlen(){
		for(i=1; i<=6; i++){
			for(j=1; j<=6; j++){
				if(Zahlen[i] == Zahlen[j]){                           /** Wenn es doppelte Zahlen gibt */
					Zahl = (Math.random()* 48) +1;                    /** gegeriere eine neue */
					Zahlen[j] = (int) Math.round(Zahlen[i]);          /** und überschreibe die alte */
 					doppelteZahlen();                                 /** durchlauf nochmal (um wieder doppelte auszuschließen)*/
				}
			}
		}
	}
		
	
	/* Eingabe in die Konsole */
	public void eingabe() throws IOException{                          /** Fehlerausgabe */
		for(a=1; a<=6; a++){                                           /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + a +"te Zahl eingeben");            /** Aufforderung zur Eingabe */
	
			InputStreamReader eingabe = new InputStreamReader (System.in);
			BufferedReader peingabe = new BufferedReader (eingabe);
			
			flag =Integer.parseInt(peingabe.readLine());                /** Überprüft Eingabe der Zahlen */
			if(flag>49 || flag<1){                                      /**                "             */
				System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
				a--;
				
			}
		}
	}
	
	/*Auswerten wieviel Richtige */
	public void auswerten(){
		for(int i=0; i<=6; i++){
			for(int j=0; j<=6; j++){
				if(Zahlen[i] == Zahlen[j]){                             /** Generierte Zahlen mit Eingegebenen vergleichen */
					richtigezahlen++;                                   /** wenn identisch +1 */
				}
					
			}
		}
	}
	
	
	/* Programm ausführen */
	public static void main(String[] args)throws IOException{
		LottoTest2 lotto = new LottoTest2();                            /** Objekte erstellen */
		lotto.eingabe(); 
		lotto.zahlengenerieren(); 
		lotto.auswerten();
	
		/*
		* lotto.doppelteZahlen();
		*/
		
		System.out.println("Die Lottozahlen sind: ");
		for(int i = 0; i<6; i++){
			System.out.println(lotto.Zahlen[i]+ " ");                    /** Generierte Zahlen werden ausgegeben */
			System.out.println(richtigezahlen +" Zahlen erraten");       /** Richtige Zahlen werden ausgegeben */
		}
		
		
}
	
}

meine ausgabe (vor der fehlermeldung) so:

Code:
1te Zahl eingeben
1
2te Zahl eingeben
2
3te Zahl eingeben
3
4te Zahl eingeben
4
5te Zahl eingeben
5
6te Zahl eingeben
6


kann mir jemand helfen?
vielen dank!
 
das war aber nicht der fehler

Code:
0te Zahl eingeben
1
1te Zahl eingeben
2
2te Zahl eingeben
3
3te Zahl eingeben
4
4te Zahl eingeben
5
5te Zahl eingeben
6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
	at startUp.LottoTest2.auswerten(LottoTest2.java:57)
	at startUp.LottoTest2.main(LottoTest2.java:71)
 
Zeile 57
Code:
 for(int j=0; j<=6; j++){
j<=5 oder j<6
aber nicht so wie es da steht...
 
Du darfst (so wie azubi geschrieben hat) natürlcih dann auch nicht auf das 7. Element zugreifen wenn du nur 6 hast ...
 
sehr gut kumpels 🙂
das problem wäre gelöst!
hab zwar nun n neues - aber das schau ich mir erstmal an 😉

ich hoffe, darf mich wieder melden wenn ich nicht weiter komme?!?!?


danke nochmals!
 
Nun ist es weider so weit 😛

quellcode
Code:
package startUp;

import java.io.*;

public class LottoTest2 {
	
	int [] Zahlen = new int[6];
	int [] rzahl = new int[6];
	int richtige, j, i, a;
	static int richtigezahlen=0;
	double  Zahl;
	int flag;

	
	/* Zahlen generieren */
	public void zahlengenerieren(){
		for(i=0; i<=5; i++){
			Zahl = Math.random()* 48+1;
			Zahlen[i] = (int) Math.round(Zahl);
		}
		
	}
	
	/* Schaut nach doppelten Zahlen */
	public void doppelteZahlen(){
		for(i=0; i<=5; i++){
			for(j= i+1; j<=5; j++){
				if(Zahlen[i] == Zahlen[j]){                           /** Wenn es doppelte Zahlen gibt */
					Zahl = (Math.random()* 48) +1;                    /** gegeriere eine neue */
					Zahlen[j] = (int) Math.round(Zahl);               /** und überschreibe die alte */
 					doppelteZahlen();                                 /** durchlauf nochmal (um wieder doppelte auszuschließen)*/
				}
			}
		}
	}
		
	
	/* Eingabe in die Konsole */
	public void eingabe() throws IOException{                          /** Fehlerausgabe */
		for(a=1; a<=6; a++){                                           /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + a +"te Zahl eingeben");            /** Aufforderung zur Eingabe */
	
			InputStreamReader eingabe = new InputStreamReader (System.in);
			BufferedReader peingabe = new BufferedReader (eingabe);
			try{
			flag =Integer.parseInt(peingabe.readLine());                /** Überprüft Eingabe der Zahlen */
			if(flag>49 || flag<1){                                      
				System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
				a--;
			}
				else{
					for(int i = 0; i<=5; i++){
						if(Zahlen[i]==flag){
							System.out.println("Zahl wurde schon eingegeben" + a++ +"te  Zahl erneut eingeben");
							flag =Integer.parseInt(peingabe.readLine());
							if(flag>49 || flag<1){
								System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
								a--;
							}
						else{
						Zahlen[a]=flag;
						a--;
						break;}
						}	
					}	
			Zahlen[a]=flag;
				}
			}
			catch(NumberFormatException e){
				a--;
			}
		}
			
	}
	
	/*Auswerten wieviel Richtige */
	public void auswerten(){
		for(int i=0; i<6; i++){
			for(int j=0; j<6; j++){
				if(Zahlen[i] == Zahlen[j]){                             /** Generierte Zahlen mit Eingegebenen vergleichen */
					richtigezahlen++;                                   /** wenn identisch +1 */
				}
					
			}
		}
	}
	
	
	/* Programm ausführen */
	public static void main(String[] args)throws IOException{
		
		LottoTest2 lotto = new LottoTest2();                            /** Objekte erstellen */
		lotto.eingabe(); 
		lotto.zahlengenerieren(); 
		lotto.auswerten();
	
		/*
		* lotto.doppelteZahlen();
		*/
		
		System.out.println("Die Lottozahlen sind: ");
		for(int i=0; i<=5; i++){
			System.out.println(lotto.Zahlen[i]+ " ");                    /** Generierte Zahlen werden ausgegeben */
			System.out.println(richtigezahlen +" Zahlen erraten");       /** Richtige Zahlen werden ausgegeben */
		}
		
		
}
	
}


meine ausgabe in der console
Code:
1te Zahl eingeben
1
2te Zahl eingeben
2
3te Zahl eingeben
3
4te Zahl eingeben
4
5te Zahl eingeben
5
6te Zahl eingeben
6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
	at startUp.LottoTest2.eingabe(LottoTest2.java:66)
	at startUp.LottoTest2.main(LottoTest2.java:93)


der fehler soll hier liegen
Code:
			Zahlen[a]=flag;

habe dort schon fast alle möglichen variablen eingesetzt, entweder wird nichts angezeigt oder noch mehr fehler.. iwie komisch ???:L


danke schonmal
 
Du hast da immernoch ne Schleife von a = 1 bis a = 6. Außerdem inkrementierst du a jedesmal wenn die Zahl schonmal eingegeben wurde. Ist imho auch nicht Sinn und Zweck der Sache oder?
 
Mit der Schleife gibt es aber keine probleme.
würde ich den wert auf 0 setzen, würde in der konsole "0te Zahl eingeben" kommen.
komische sache..

ach habe es gerade gefunden
Code:
			System.out.println("" + a++ +"te Zahl eingeben");            /** Aufforderung zur Eingabe */

hatte das ++ vergessen..
 
Code:
		for(a=0; a<6; a++){                                            /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + a++ +"te Zahl eingeben");          /** Aufforderung zur Eingabe */

klappt trotzdem nich ?!
hab gespeichert, 4x ausgeführt...
 
is ja erstma egal wie ich programmiere, is ja 1. mein erstes mal dass ich was mit java mache und 2. muss es ja auch nur funktionieren.. feilen kann man immernoch 😉
 
Was willste denn mit deiner Inkrementierung die ganze Zeit? Ich denke mal das sollte korrekt

Code:
System.out.println("blub" + (a + 1) + "blob");

heisen!?
 
Jau so klappt es..
verstehe nur nicht wieso, dachte a++ bewirkt das gleiche wie (a + 1). a++ erhöht sich doch selbst oder?

naja, wie dem auch sei, danke für die mühe - bis hierher 🙂

Code:
1te Zahl eingeben
1
2te Zahl eingeben
2
3te Zahl eingeben
3
4te Zahl eingeben
4
5te Zahl eingeben
5
6te Zahl eingeben
6
Die Lottozahlen sind: 
45 
0 Zahlen erraten
33 
0 Zahlen erraten
15 
0 Zahlen erraten
38 
0 Zahlen erraten
45 
0 Zahlen erraten
46 
0 Zahlen erraten

habe momentan nurnoch einen ausgabefehler und muss doppelt generierte zahlen noch überprüfen..
ich mach dann mal weiter 🙂

nochmal danke!!! 🙂
 
nein, da haste was falsch verstanden.

Code:
a++;

macht das Selbe wie

Code:
a = a + 1;

Hier wird a ein neuer Wert zugewiesen. Wenn man lediglich

Code:
a + 1;

schreibt, bekommt man als ergebnis a + 1 zurück, aber a bleibt unverändert.
 
Code:
package startUp;

import java.io.*;

public class LottoTest2 {
	
	int [] Zahlen = new int[6];
	int [] rzahl = new int[6];
	int richtige, j, i, a;
	static int richtigezahlen=0;
	double  Zahl;
	int flag, zaehler;

	
	/* Zahlen generieren */
	public void zahlengenerieren(){
		for(i=0; i<=5; i++){
			Zahl = Math.random()* 48+1;
			Zahlen[i] = (int) Math.round(Zahl);
		}
		
	}
	
	/* Schaut nach doppelten Zahlen */
	public void doppelteZahlen(){
		for(i=0; i<=5; i++){
			for(j= i+1; j<=5; j++){
				if(Zahlen[i] == Zahlen[j]){                           /** Wenn es doppelte Zahlen gibt */
					Zahl = (Math.random()* 48) +1;                    /** gegeriere eine neue */
					Zahlen[j] = (int) Math.round(Zahl);               /** und überschreibe die alte */
 					doppelteZahlen();                                 /** durchlauf nochmal (um wieder doppelte auszuschließen)*/
				}
			}
		}
	}
		
	
	/* Eingabe in die Konsole */
	public void eingabe() throws IOException{                          /** Fehlerausgabe */
		for(a=0; a<6; a++){                                            /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + (a +1) +"te Zahl eingeben");          /** Aufforderung zur Eingabe */
			
			InputStreamReader eingabe = new InputStreamReader (System.in);
			BufferedReader peingabe = new BufferedReader (eingabe);
			try{
			flag =Integer.parseInt(peingabe.readLine());                /** Überprüft Eingabe der Zahlen */
			if(flag>49 || flag<1){                                      
				System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
				a--;
			}
				else{
					for(int i = 0; i<=5; i++){
						if(rzahl[i]==flag){
							System.out.println("Zahl wurde schon eingegeben!");
							System.out.println( + (a+1) +"te  Zahl erneut eingeben");
							flag =Integer.parseInt(peingabe.readLine());
							if(flag>49 || flag<1){
								System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
								a--;
								i--;
							}
						else{
						rzahl[a]=flag;
						a--;
						break;}
						}	
					}	
			rzahl[a]=flag;
				}
			}
			catch(NumberFormatException e){
				a--;
			}
		}
			
	}
	
	/*Auswerten wieviel Richtige */
	public void auswerten(){
		for(int i=0; i<6; i++){
			for(int j=0; j<6; j++){
				if(Zahlen[i] == rzahl[j]){                             /** Generierte Zahlen mit Eingegebenen vergleichen */
					richtigezahlen = richtigezahlen +1;                /** wenn identisch +1 */
				}
					
			}
		}
	}
	
	
	/* Generierte Zahlen sortieren "BubbleSort" */
	public void sort() {
	      boolean sortiert = true;
	      do {
	          sortiert = true;
	          for (int i = 1; i < Zahlen.length; i++) {
	              if (Zahlen[i - 1] > Zahlen[i]) {
	                  final int tmp = Zahlen[i - 1];
	                  Zahlen[i - 1] = Zahlen[i];
	                  Zahlen[i] = tmp;
	                  sortiert = false;
	              }
	          }
	      } while (!sortiert);
	  }
	    

	
	
	/* Programm ausführen */
	public static void main(String[] args)throws IOException{
		
		LottoTest2 lotto = new LottoTest2();                            /** Objekte erstellen */
		lotto.eingabe(); 
		lotto.zahlengenerieren(); 
		lotto.auswerten();
	

		lotto.doppelteZahlen();
		lotto.sort();

		
		System.out.println("Die Lottozahlen sind: ");
		for(int i=0; i<=5; i++){
			System.out.println(lotto.Zahlen[i]+ " ");                        /** Generierte Zahlen werden ausgegeben */
		}
		System.out.println(" ");
		System.out.println(richtigezahlen +" Zahl(en) richtig getippt");       /** Richtige Zahlen werden ausgegeben */	
}
	
}


Code:
1te Zahl eingeben
1
2te Zahl eingeben
2
3te Zahl eingeben
2
Zahl wurde schon eingegeben
3te  Zahl erneut eingeben
3
3te Zahl eingeben
4
4te Zahl eingeben
5
5te Zahl eingeben
7
6te Zahl eingeben
56
Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.
6te Zahl eingeben
45
Die Lottozahlen sind: 
7 
11 
14 
22 
29 
38 
 
1 Zahl(en) richtig getippt

juhuu, nun klappt alles!
nochmals vielen vielen dank! thumbs up! 🙂 🙂
 
liegt hier

Code:
3te Zahl eingeben
2
Zahl wurde schon eingegeben
3te  Zahl erneut eingeben
3
3te Zahl eingeben
4

nicht ein Fehler vor? das letzte "3te Zahl eingeben" ist doch überflüssig oder?
 
ouh, sehr gut beobachtet 🙂
Ja, isn bug. ich schau mal woran es liegt 🙂)

thx!
 
vll kannst du mir bei meinem gedankengang etwas auf die sprünge helfen..
also ich meine, ich müsste die schleife nochmal durchlaufen, um zu prüfen, ob nun eine andere zahl eingegeben wurde, nachdem eine doppelte eingegeben wurde, oder?

Code:
	public void eingabe() throws IOException{                             /** Fehlerausgabe */
		for(a=0; a<6; a++){                                               /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + (a +1) +"te Zahl eingeben");          /** Aufforderung zur Eingabe */
			
			InputStreamReader eingabe = new InputStreamReader (System.in);
			BufferedReader peingabe = new BufferedReader (eingabe);
			try{
			flag =Integer.parseInt(peingabe.readLine());                  /** Überprüft Eingabe der Zahlen */
			if(flag>49 || flag<1){                                      
				System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
				a--;
			}
				else{
					for(int i = 0; i<=5; i++){
						if(rzahl[i]==flag){
							System.out.println("Zahl wurde schon eingegeben!");
							System.out.println( + (a+1) +"te  Zahl erneut eingeben");
							flag =Integer.parseInt(peingabe.readLine());
							if(flag>49 || flag<1){
								System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
								a--;
							}
						else{
						rzahl[a]=flag;
						a--;
						break;}
						}	
					}	
			rzahl[a]=flag;
				}
			}
			catch(NumberFormatException e){
				a--;
			}
		}
			
	}

ich müsste also theoretisch nach dem
Code:
						if(rzahl[i]==flag){
							System.out.println("Zahl wurde schon eingegeben!");
							System.out.println( + (a+1) +"te  Zahl erneut eingeben");
							flag =Integer.parseInt(peingabe.readLine());

die schleife nochmal durchlaufen, bzw. diesen teil, oder?
 
Dein Ansatz a-- ist schon gar nicht mal so schlecht. Ich würde dann noch mit einem boolean arbeiten über welchen du dann entscheidest welcher von deinen beiden möglichen Texten ausgegeben werden soll. Jenachdem ob die Zahl schonmal eingegeben wurde oder nicht wird der dann halt auf true oder false gesetzt.
 
das p hat gesagt.:
dachte a++ bewirkt das gleiche wie (a + 1). a++ erhöht sich doch selbst oder?

Eben nicht!

(a+1) ist eine Operation die den Wert von a um eins erhöht liefert.
Der Wert von a bleibt dabei erhalten.

a++ liefert auch diesen Wert, erhöht aber auch a selbst.

Und da du a auch im entsprechenden Teil der for-Schleife
erhöhst, erhöhst du a eben bei jedem Schleifendurchlauf doppelt.
 
moin,

komme einfach nicht weiter 🙁
weiß nicht, wo ich diese "ankerpunkte" (diese mit dem boolean) setzen soll, damit es funktioniert.

ich übergebe die eingegebene zahl doch in "ausgabe" und vergleiche es mit dem array "rzahl[a]" oder bin ich grad vollkommen neben der kappe?




Code:
	/* Eingabe in die Konsole */
	public void eingabe() throws IOException{                             /** Fehlerausgabe */
		for(a=0; a<6; a++){                                               /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + (a +1) +"te Zahl eingeben");          /** Aufforderung zur Eingabe */
			
			InputStreamReader eingabe = new InputStreamReader (System.in);
			BufferedReader peingabe = new BufferedReader (eingabe);
			try{
			ausgabe =Integer.parseInt(peingabe.readLine());                  /** Überprüft Eingabe der Zahlen */
			if(ausgabe>49 || ausgabe<1){
				System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
				a--;
			}
				else{
					for(int i = 0; i<=5; i++){
						if(rzahl[i]==ausgabe){                                /** Überprüft identische Zahlen */
							System.out.println("Zahl wurde schon eingegeben!");
							System.out.println( + (a+1) +"te  Zahl erneut eingeben");
							ausgabe =Integer.parseInt(peingabe.readLine());
							if(ausgabe>49 || ausgabe<1){
								System.out.println("Ungültige Zahl! Nur Zahlen zwischen 1 und 49 eingeben");
							}
						else{
						rzahl[a]=ausgabe;
						a--;
						break;}
						}
					}
			rzahl[a]=ausgabe;
				}
			}
			catch(NumberFormatException e){
				a--;
			}
		}
			
	}
 
Ein kleines Beispiel (du lernst ja schnell!)

Code:
boolean flag = false;
for (int i = 0; i < array.length; i++) {
   flag = false;
   for (int j = 0; j < zufall.length; j++) {
      if (array[i] == zufall[j]) {
         flag = true;
         break;
      }
   }
   if (flag) {
      System.out.println("Bitte Wert " + i + " verändern");
      i--;
   }
   else {
      System.out.println("Bearbeite nächsten Wert");
   }
}

Das funktioniert so natürlich nicht, da bei mir keine Möglichkeit gegeben ist den Wert von Element "i" im Array "array" zu ändern, aber das Prinzip sollte dir jetzt klar sein!?
 
Code:
package startUp;

import java.io.*;

public class LottoTest2 {
	
	int [] Zahlen = new int[6];
	int [] rzahl = new int[6];
	int richtige, j, i, a;
	static int richtigezahlen=0;
	double  Zahl;
	int ausgabe, zaehler;
	boolean flag;

	
	/* Zahlen generieren */
	public void zahlengenerieren(){
		for(i=0; i<=5; i++){
			Zahl = Math.random()* 48+1;
			Zahlen[i] = (int) Math.round(Zahl);
		}
		
	}
	
	/* Schaut nach doppelten Zahlen */
	public void doppelteZahlen(){
		for(i=0; i<=5; i++){
			for(j= i+1; j<=5; j++){
				if(Zahlen[i] == Zahlen[j]){                           /** Wenn es doppelte Zahlen gibt */
					Zahl = (Math.random()* 48) +1;                    /** gegeriere eine neue */
					Zahlen[j] = (int) Math.round(Zahl);               /** und überschreibe die alte */
 					doppelteZahlen();                                 /** durchläuft nochmal (um wieder doppelte auszuschließen)*/
				}
			}
		}
	}
		
	
	/* Eingabe in die Konsole */
	public void eingabe() throws IOException{                             /** Fehlerausgabe */
		for(a=0; a<6; a++){                                               /** Eingabezahlen von 1 bis 6 */
			System.out.println("" + (a +1) +". Zahl eingeben:");          /** Aufforderung zur Eingabe */
			
			InputStreamReader eingabe = new InputStreamReader (System.in);
			BufferedReader peingabe = new BufferedReader (eingabe);
			try{
			ausgabe =Integer.parseInt(peingabe.readLine());                  /** Überprüft Eingabe der Zahlen */
			rzahl[a]=ausgabe;
			if(ausgabe>49 || ausgabe<1){
				System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49.");
				a--;
			}
			else{
					for(int i = 0; i<a; i++){
						if(rzahl[i]==ausgabe){                                /** Überprüft identische Zahlen */
							System.out.println("Zahl wurde schon eingegeben!");
							a--;
							break;
						}
					}
			rzahl[a]=ausgabe;
				}
			}
			catch(NumberFormatException e){
				a--;
			}
			}
		}

	
	/*Auswerten wieviel Richtige */
	public void auswerten(){
		for(int i=0; i<6; i++){
			for(int j=0; j<6; j++){
				if(Zahlen[i] == rzahl[j]){                             /** Generierte Zahlen mit Eingegebenen vergleichen */
					richtigezahlen = richtigezahlen +1;                /** wenn identisch +1 */
				}
					
			}
		}
	}
	
	
	/* Generierte Zahlen sortieren "BubbleSort" */
	public void sort() {
	      boolean sortiert = true;
	      do {
	          sortiert = true;
	          for (int i = 1; i < Zahlen.length; i++) {
	              if (Zahlen[i-1] > Zahlen[i]) {
	                  final int tmp = Zahlen[i-1];
	                  Zahlen[i-1] = Zahlen[i];
	                  Zahlen[i] = tmp;
	                  sortiert = false;
	              }
	          }
	      } while (!sortiert);
	  }
	    

	
	
	/* Programm ausführen */
	  public static void main(String[] args)throws IOException{ 
		
		LottoTest2 lotto = new LottoTest2();                            /** Objekte erstellen */
		lotto.eingabe(); 
		lotto.zahlengenerieren(); 
		lotto.auswerten();

		lotto.doppelteZahlen();
		lotto.sort();

		
		System.out.println("Die Lottozahlen sind: ");
		for(int i=0; i<=5; i++){
			System.out.println(lotto.Zahlen[i]+ " ");                        /** Generierte Zahlen werden ausgegeben */
		}
		System.out.println(" ");                                             /** Absatz */
		System.out.println(richtigezahlen +" Zahl(en) richtig getippt");     /** Richtige Zahlen werden ausgegeben */	
}
	
}

Habe es nun, hoffe ich, endlich geschafft 🙂
Habe nicht das mit den ankern gemacht, sondern mir was anderes einfallen lassen.

was sagste? 🙂
 
Joa, so gehts auch 🙂 .

Zeile 62 ist Überflüssig

Code:
rzahl[a]=ausgabe;

Die Zuweisung machst du schon in Zeile 49.
 
okay, hast recht 🙂
ich mach mich dann jetzt an die feinheiten

vielen dank, dass du mir geholfen hast! 10/10 in freundlichkeit und hilfsbereitschaft 🙂


vll liest man sich mal wieder!
mfg
 
so, da bin ich wieder 😀

wie mache ich nun ein applet daraus?
suche fast schon 1h im inet rum, finde aber leider nichts, ausser so sachen wie

Code:
public
class HelloWorldApplet  extends java.applet.Applet{  
public  void paint(java.awt.Graphics g) {    
g.drawString("Hello world!", 50, 25);  
}
}

aber das hilft mir nicht viel :/
 
Hm, lies dazu am Besten mal das Swing (Grafik) Kapitel in deinem Buch oder in einem Online-Buch deiner Wahl (zu finden über Forensuche oder in der Bücher, Links, Tutorials Sektion des Forums). Dir hier die Basics beizubringen wäre imho zu viel des Guten 😉 .
 
ist das denn so viel arbeit daraus nun ein applet zu machen?
kann man nich einfach ein fenster öffnen indem dann quasi die konsole geöffnet wird und man das lotto durchlaufen lassen kann? :/

schad'
 
Erstmal, es besteht ein Unterschied ob du ein Fenster (JFrame) oder ein Applet (JApplet), welches in einem Web-Browser eingebaut wird, erstellen möchtest.

Es wäre zwar schnell programmiert, aber dir würde es nichts helfen, weil du nur neue Begriffe hören würdest mit denen du (noch) nichts anfangen kannst wie z. B. Listener, Container, Componenten, LayoutManager, ...

Ist wohl das Beste, wenn du dich mit einem Buch erstmal zurückziehst, sobald du Grundkentnisse hast, werden wir dir gerne helfen. Aber daran hab ich mal keine Zweifel du lernst ja ziemlich schnell!
 
Gut, dann werde ich mal weiter recherchieren, lernen und lesen 🙂
vielen dank schonmal bis hierhin!
 
Code:
package startUp; 

import java.io.*; 

public class LottoTest { 
    
   int [] Zahlen = new int[6]; 
   int [] rzahl = new int[6]; 
   int  j, i, a; 
   static int richtigezahlen=0; 
   double  Zahl; 
   int ausgabe; 

    
   /* Zahlen generieren */ 
   public void zahlengenerieren(){ 
      for(i=0; i<=5; i++){ 
         Zahl = Math.random()* 48+1; 
         Zahlen[i] = (int) Math.round(Zahl); 
      } 
       
   } 
    
   /* Schaut nach doppelten Zahlen */ 
   public void doppelteZahlen(){ 
      for(i=0; i<=5; i++){ 
         for(j= i+1; j<=5; j++){ 
            if(Zahlen[i] == Zahlen[j]){                           /** Wenn es doppelte Zahlen gibt */ 
               Zahl = (Math.random()* 48) +1;                    /** gegeriere eine neue */ 
               Zahlen[j] = (int) Math.round(Zahl);               /** und überschreibe die alte */ 
               doppelteZahlen();                                 /** durchläuft nochmal (um wieder doppelte auszuschließen)*/ 
            } 
         } 
      } 
   } 
       
    
   /* Eingabe in die Konsole */ 
   public void eingabe() throws IOException{                             /** Fehlerausgabe */ 
      for(a=0; a<6; a++){                                               /** Eingabezahlen von 1 bis 6 */ 
         System.out.println("" + (a +1) +". Zahl eingeben:");          /** Aufforderung zur Eingabe */ 
          
         InputStreamReader eingabe = new InputStreamReader (System.in); 
         BufferedReader peingabe = new BufferedReader (eingabe); 
         try{ 
         ausgabe =Integer.parseInt(peingabe.readLine());                  /** Überprüft Eingabe der Zahlen */ 
         rzahl[a]=ausgabe; 
         if(ausgabe>49 || ausgabe<1){ 
            System.out.println("Ungültige Zahl! Es gelten nur Zahlen zwischen 1 und 49."); 
            a--; 
         } 
         else{ 
               for(int i = 0; i<a; i++){ 
                  if(rzahl[i]==ausgabe){                                /** Überprüft identische Zahlen */ 
                     System.out.println("Zahl wurde schon eingegeben!"); 
                     a--; 
                     break; 
                  } 
               } 
            } 
         } 
         catch(NumberFormatException e){ 
            a--; 
         } 
         } 
      } 

    
   /*Auswerten wieviel Richtige */ 
   public void auswerten(){ 
      for(int i=0; i<6; i++){ 
         for(int j=0; j<6; j++){ 
            if(Zahlen[i] == rzahl[j]){                             /** Generierte Zahlen mit Eingegebenen vergleichen */ 
               richtigezahlen = richtigezahlen +1;                /** wenn identisch +1 */ 
            } 
                
         } 
      } 
   } 
    
    
   /* Generierte Zahlen sortieren "BubbleSort" */ 
   public void sort() { 
         boolean sortiert = true; 
         do { 
             sortiert = true; 
             for (int i = 1; i < Zahlen.length; i++) { 
                 if (Zahlen[i-1] > Zahlen[i]) { 
                     final int tmp = Zahlen[i-1]; 
                     Zahlen[i-1] = Zahlen[i]; 
                     Zahlen[i] = tmp; 
                     sortiert = false; 
                 } 
             } 
         } while (!sortiert); 
     } 
       

    
    
   /* Programm ausführen */ 
     public static void main(String[] args)throws IOException{ 
       
      LottoTest2 lotto = new LottoTest2();                            /** Objekte erstellen */ 
      lotto.eingabe(); 
      lotto.zahlengenerieren(); 
      lotto.auswerten(); 

      lotto.doppelteZahlen(); 
      lotto.sort(); 

      System.out.println(" ");
      System.out.println("Die Lottozahlen sind: "); 
      for(int i=0; i<=5; i++){ 
         System.out.print(lotto.Zahlen[i]+ " ");                        /** Generierte Zahlen werden ausgegeben */ 
      } 
      System.out.println(" ");                                             /** Absatz */ 
      System.out.println(richtigezahlen +" Zahl(en) richtig getippt");     /** Richtige Zahlen werden ausgegeben */    
} 
    
}

Als ich heute morgen das Programm aufrief, wurden die richtigen Zahlen nicht mehr gezählt..

Code:
1. Zahl eingeben:  1
2. Zahl eingeben:  2
3. Zahl eingeben:  3
4. Zahl eingeben:  4
5. Zahl eingeben:  5
6. Zahl eingeben:  6
 
Die Lottozahlen sind: 
2 7 11 32 37 39  
0 Zahl(en) richtig getippt

Eigentlich müsste ich eine Richtige haben :/
 
Also bei mir funktioniert das einwandfrei ... Du weist aber schon, dass du in der main-Methode eine Instanz deiner Klasse LottoTest2 erzeugst und nicht der geposteten Klasse LottoTest?

Noch eine paar Anmerkungen, wenn dein Quellcode schöner werden soll 😉 :

1.) Variablennamen schreibt man klein
2.) Die Integer-Variable richtigezahlen brauchste nicht static machen. Kannst dich ja mal mit dem Schlüsselwort static beschäftigen, dazu gibt es in den FAQ imho einen Beitrag.
3.) Man sollte auf Variablen grundsätzlich von außen nur mit gettern und settern zugreifen und die Variablen intern als privat deklarieren. Warum erklärt dir auch ein Beitrag in den FAQ
 
Das mit LottoTest2 war der Fehler, vielen Dank!
Ist quasi ein Backup-QT, da ich mit dem anderen versuche das ganze in einem Applet darzustellen. Und bevor ich mir alles kaputt mache, habe ich diesen in einer anderen Datei gesichert 😉

Die QT-Verschönerungen werde ich mir bei Gelegenheit auch mal anschauen!
Vielen Dank!! 🙂
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben