Array und Schleifen Verständnisproblem

Status
Nicht offen für weitere Antworten.
J

java.jason

Gast
Hi Leute,

ich habe mir folgende Methode setzen gebastelt.
Mithilfe von zwei geschachtelten Schleifen möchte ich einen zweidimensionalen Array nach einem bestimmten int Wert durchsuchen und dann dessen "Koordinaten" bzw. die Schleifenzähler, die ich als Koordinaten für mein Layout nutze, zurückgeben.
Das funktioniert so weit ganz gut. Nur wenn ich die Schleife mit setzen(0,0) aufrufe wirft mir das return,Array die Werte 9,9 raus. Das verstehe ich absolut nicht. Normalerweise müsste doch 0,0 dabei rauskommen...
Ich bin absolut verwirrt!

Code:
	public int[] setzen (int x, int y)
	{
		
		z = x + y;
							
		int[][] a = new int[10][10];
		a[0][0] = 0;
		a[0][1] = 1;
		a[0][2] = 2;
		a[0][3] = 3;
		a[0][4] = 4;
		a[0][5] = 5;
		a[0][6] = 6;
		a[1][6] = 7;
		a[2][6] = 8;
		a[3][6] = 9;
		a[4][6] = 10;
		a[5][6] = 11;
		a[5][5] = 12;
		
		for (int i=0; i<a.length; i++)
		{
			for (int j=0; j<a.length; j++)
			{
				q = Integer.valueOf(a[i][j]).intValue();
				if (z==q)
				{
					o =i;
					g = j;
				}	
			}		
		}		
		return new int[] {o, g};
	}
Kann mir das jemand erklären? ???:L
 
S

SlaterB

Gast
das Array wird von 0,0 bis 9,9 durchlaufen,
immer wenn z==q gefunden wird, dann werden die Indexe o und g aktualisiert,
bei 0,0 ist dies der Fall, richtig,
aber auch bei sehr vielen anderen, bei über 80 der 100 Array-Positionen ist der Wert 0 (0 ist der Standardwert im Array)

9,9 ist als letztes dran und daher der Rückgabewert
 

Marco13

Top Contributor
Wenn das ERSTE Auftreten gleiche zurückgegeben werden soll, kannst du
Code:
....
           if (z==q)
            {
               return new int[] {i, j}; 
            }   
         }      
      }      
      return new int[] {-1, -1}; // Nicht gefunden!
machen. Damit werden 'o' und 'g' überflüssig.


EDIT: Bei genauer betrachtung macht dein geposteter Code ja erstmal GARkeinen Sinn, aber du wirst dir wohl was dabei gedacht haben :wink:
 
J

java.jason

Gast
GAR keinen Sinn? Hmm also ich brauche Koordinaten im Format x,y um eine Grafik an einer bestimmten Stelle in meinem Layout anzuzeigen.
Der Methode setzen übergebe ich die bisherige Position meiner Spielfigur und addiere eine gewürfelte Zahl. Anhand dieser Zahl wird dann im Array gesucht und ich verwende die Schleifenzähler zur Ausgabe der Koordinaten x,y. Ich fand die Lösung eigentlich richtig schick :(
Wie soll ich denn sowas sonst machen?
 
J

java.jason

Gast
Weil die Koordinaten Feldern in einem GridBagLayout entsprechen. Ich also nicht absolut positionieren, sondern nur bestimmte Koordinaten erlaubt sind.
Da erschien mir die Array Lösung als einfach und gut.
 
G

Guest

Gast
Könnte es auch an meiner "komischen" Array Lösung liegen, dass folgendes nicht richtig funktioniert?

Code:
	public void Spielfigur_einfuegen(Spielfeld_center spielfeld_center)
	{
	    b = setzen(wuerfeln(), position);
	    koordinaten_x = Integer.valueOf(b[0]).intValue();
	    koordinaten_y = Integer.valueOf(b[1]).intValue();
	    
	      
	    spielfeld_center.gbc = spielfeld_center.makegbc (koordinaten_y,koordinaten_x,1,1);
	    System.out.println("Koordinaten x-Achse: " + koordinaten_x);
	    System.out.println("Koordinaten y-Achse: " + koordinaten_y);
	    spielfeld_center.gbl.setConstraints(bild2, spielfeld_center.gbc);
		spielfeld_center.panel1.add(bild2);
		spielfeld_center.panel1.setComponentZOrder(bild2, 0);
		spielfeld_center.panel1.validate();
		spielfeld_center.panel1.repaint();
	}
	
	public int wuerfeln()
	{
		wuerfelzahl =(int)(Math.random()*6+1);
		System.out.println("Würfelzahl" + wuerfelzahl);
		return wuerfelzahl;
	}
	
	public int[] setzen (int x, int y)
	{
		
		z = x + y;
		System.out.println("Spielfigur auf Feld:" + z);
					
		int[][] a = new int[10][10];
		a[0][0] = 0;
		a[0][1] = 1;
		a[0][2] = 2;
		a[0][3] = 3;
		a[0][4] = 4;
		a[0][5] = 5;
		a[0][6] = 6;
		a[1][6] = 7;
		a[2][6] = 8;
		a[3][6] = 9;
		a[4][6] = 10;
		a[5][6] = 11;
		a[5][5] = 12;
		
		for (int i=0; i<a.length; i++)
		{
			for (int j=0; j<a.length; j++)
			{
				q = Integer.valueOf(a[i][j]).intValue();
				if (z==q)
				{
					return new int[] {i, j};
				}	
			}		
		}
		return new int[] {-1, -1}; //nicht gefunden		
	}

Bei ersten Ausführen der Methode Spielfigur_einfuegen funktioniert alles wunderbar. Die FIgur steht an der richtigen Stelle. Beim zweiten Ausführen springt die Figur auf das Feld 0,0, obwohl dies durch meine Methoden wuerfeln() und setzen() anders berechnet wird. Wie die Ausgabe der Koordinaten in der Konsole bestätigt.
 

Marco13

Top Contributor
"Gar keinen Sinn" weil der Array, der durchsucht wird, ja nur in der Methode angelegt und dann am Ende weggewrfen wird. Aber vermutlich wird (im fertigen Programm) ein Array an diese Methode übergeben oder so... :wink:

EDIT: Ach hätte mal VOR der Antwort reloaden sollen.... :roll: Was auch immer du damit erreichen willst, es sieht ... merkwürdig aus. Was soll das dann genau sein?
 
J

java.jason

Gast
Also ich habe ein Spielfeld über das eine Figur laufen soll. Das Spielfeld besteht aus einzelnen JLabel Images und meine Spielfigur auch aus einem JLabel Image. Klickt man auf einen Button würfeln, dann wird die Methode Spielfigur_einfugen ausgeführt und soll die Spielfigur auf die durch die Methoden wuerfeln() und setzen() errechnete Position setzen.
Nicht alle Positionen sind dabei erlaubt, da es sich um ein Spielbrett wie bei Monopoly handelt. Also in der Mitte ist nichts. Darum hab ich mir die Lösung mit dem Array überlegt. Der dient praktisch als Landkarte und weiß bescheid, welche Positionen zu welchem Spielfeld gehört. (Der Array ist momentan noch nicht vollständig angelegt - es wird später 36 Felder mit dazugehörigen Koordinaten geben)
Beim ersten Ausführen funktioniert das auch wunderbar. Meine Figur erscheint an der gewünschten Stelle. Führe ich das Konstrukt nochmal aus, scheint die Berechnung der Koordinaten auch zu funktionieren, aber die Figur wird trotzdem auf das Feld 0,0 gesetzt.
Das verstehe ich nicht.
 

Marco13

Top Contributor
Hm :? das Setzen und Bewegen einer Spielfigur, die ein Label ist, auf verschiedende Felder, die auch Labels sind, mit einem LayoutManager zu machen ... naja, ich würde das (irgendwie) anders machen. (Insbesondere vermeide ich das GridBagLayout, wenn möglich ... http://madbean.com/anim/totallygridbag/ :wink: ). Aber vielleicht hast du dir ja was dabei gedacht.

Die Sache mit dem Array, der dort erstellt und durchsucht wird, ... ja. Es wurde ja schon gesagt, dass man statt des int[2] einen Point verwenden kann (der auch nur zwei ints enthält). Abgesehen davon kann man die Abbildung ja auch einfach umdrehen: Statt in einem array[m][n] die Feldnummern zu speichern, und bei jeder Bewegung die Feldnummer zu suchen und dann die Array-Indizes zurückzugeben, wäre es vmtl. sinnvoller, einen Array zu erstellen, der direkt die Feldnummer auf die gewünschten Indizes mappt. In deinem Fall also nicht
Code:
      int[][] a = new int[10][10];
      a[0][0] = 0;
      a[0][1] = 1;
...
      a[5][6] = 11;
      a[5][5] = 12;
sondern
Code:
      Point positions[] = new Point[12];
      positions[0] = new Point(0,0);
      positions[1] = new Point(0,1);
...
      positions[12] = new Point(5,5);
Aber das ist eher Programmier-Kosmetik, und hat mit dem Problem, dass die Labels nicht (an der gewünschten Stelle) erscheinen nichts zu tun.

Ein kleines, compilierbares Beispiel wäre vmtl. zu viel verlangt? Speziell weil man sonst die Ursache wohl nur schwer bestimmten kann. Ins blaue getippt: Die Zeile
spielfeld_center.panel1.add(bild2);
wird bei jedem Aufruf ausgeführt. Wird 'bild2' zwischendurch auch mal wieder entfernt? (Sonst könnte(!!!) es ihn schon wegen des mehrfachen Hinzufügens raushauen...)
 
J

java.jason

Gast
haha der clip ist super! genau so fühle ich mich auch! SCREW YOU GRIDBAG!!!

Ich habe mit Java ganz neu angefangen. Ist die erste OOP Sprache, die ich versuche zu lernen.
Die Lösung mit dem GridBagLayout scheint tatsächlich nicht ganz ideal zu sein, doch ich wüsste nicht wie ich es besser machen soll. Alles mit setBounds absoult positionieren? Da tipp ich mir ja die Finger wund.
Ich werde mal kurz ein kompilierbares Beispiel zusammenpacken und hochladen.
 
J

java.jason

Gast
So ich habe hier mal das zusammengeschnürt was ich bisher habe:

http://www.file-upload.net/download-530674/game.zip.html

Passwort: gridbag

Die Main Klasse findest du in Start.java

Habe mal Grafiken etc. dazugepackt, damit man es wirklich nachvollziehen kann. Das Problem wird schon sichtbar, wenn du versuchst über das Menü eine neue Spieleranzahl auszuwählen. Das klappt beim ersten mal klasse. Danach verschiebt er die Labels auf merkwürdige Art und Weise. Klickt man dann auf Würfeln springt Spielfigur 1 (die blaue) wieder zurück auf LOS.

Bitte nicht erschrecken. Der Code ist wahrscheinlich ziemlich wüst. Ist eigentlich ein Projekt, an dem noch zwei andere Leute mitschreiben sollen, aber von denen kommt nicht sonderlich viel :(

Danke für deine Hilfe
java.jason
 

Marco13

Top Contributor
Hmja :? Nach einigen Änderungen funktioniert es etwas ... mehr ... aber ... vom Konzept her ist das wirklich nicht so toll :? Aber sei's drum.

Folgende Änderungen hatte ich mal gemacht, um es ansatzweise lauffähig zu machen

Klasse GUI:
Code:
        //Variablen anlegen
        private JLabel bild1 = new JLabel(new ImageIcon("spielfigur1.png"));
        private JLabel bild2 = new JLabel(new ImageIcon("spielfigur2.png"));
        private JLabel bild3 = new JLabel(new ImageIcon("spielfigur3.png"));
        private JLabel bild4 = new JLabel(new ImageIcon("spielfigur4.png"));
        private Spielfigur spielfigur1 = new Spielfigur(bild1); // XXX Nur EINmal erstellen!
        private Spielfigur spielfigur2 = new Spielfigur(bild2);
        private Spielfigur spielfigur3 = new Spielfigur(bild3);
        private Spielfigur spielfigur4 = new Spielfigur(bild4);
        private Spielfeld_center spielfeld_center;
        private int spielerzahl;

Code:
        //Die zugehörige ActionPerformed Methode als anonyme Klasse
        button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                spielfigur1.Spielfigur_positionieren(spielfeld_center, spielfigur1.wuerfeln());
            }
        });

Code:
        //Verarbeiten der vom Menü kommenden Informationen über die Spielerzahl und einfügen der Spielfiguren
        public void setSpieleranzahl(int x)
        {

            // XXX Alle entfernen
            spielfeld_center.panel1.remove(spielfigur1.bild2);
            spielfeld_center.panel1.remove(spielfigur2.bild2);
            spielfeld_center.panel1.remove(spielfigur3.bild2);
            spielfeld_center.panel1.remove(spielfigur4.bild2);


            this.spielerzahl = x;

            switch (x)
            {
            case 2:
                System.out.println("Die Spieleranzahl beträgt: " + x);
                spielfigur1.Spielfigur_einfuegen(spielfeld_center);
                spielfigur2.Spielfigur_einfuegen(spielfeld_center);
                break;
            case 3:
                System.out.println("Die Spieleranzahl beträgt: " + x);
                spielfigur1.Spielfigur_einfuegen(spielfeld_center);
                spielfigur2.Spielfigur_einfuegen(spielfeld_center);
                spielfigur3.Spielfigur_einfuegen(spielfeld_center);
                break;
            case 4:
                System.out.println("Die Spieleranzahl beträgt: " + x);
                spielfigur1.Spielfigur_einfuegen(spielfeld_center);
                spielfigur2.Spielfigur_einfuegen(spielfeld_center);
                spielfigur3.Spielfigur_einfuegen(spielfeld_center);
                spielfigur4.Spielfigur_einfuegen(spielfeld_center);
                break;
            default:
                System.out.println("Bitte Spieleranzahl auswählen!");
                break;
            }
        }

Klasse Spielfigur
Code:
    //Hier liegt unser Problem!!! XXX Getrennt nach einfuegen/positionieren
    public void Spielfigur_einfuegen(Spielfeld_center spielfeld_center)
    {
        System.out.println("Füege bei 0,0 ein");
        spielfeld_center.panel1.add(bild2);
        Spielfigur_positionieren(spielfeld_center, 0);
    }

    public void Spielfigur_positionieren(Spielfeld_center spielfeld_center, int u)
    {
        b = setzen(u, position);
        koordinaten_x = Integer.valueOf(b[0]).intValue();
        koordinaten_y = Integer.valueOf(b[1]).intValue();
        gbc2 = spielfeld_center.makegbc (koordinaten_y,koordinaten_x,1,1);
        System.out.println("Koordinaten x-Achse: " + koordinaten_x);
        System.out.println("Koordinaten y-Achse: " + koordinaten_y);
        spielfeld_center.gbl.setConstraints(bild2, gbc2);
        spielfeld_center.panel1.setComponentZOrder(bild2, 0);
        spielfeld_center.panel1.doLayout();
        spielfeld_center.panel1.validate();
        spielfeld_center.panel1.repaint();


    }



Im Moment übernimmt die Gui praktisch die gesamte Steuerung und Verwaltung. Das ist nicht so gut. Ihr solltet euch - ganz generell - mal genau Gedanken machen, welche Eigenschaften (fields) und Methoden eure Klassen anbieten sollten. Ob ihr dann zu dem Schluss kommt, dass eine Spielfigur wirklich 'wuerfeln()' können soll, oder ob es nicht besser eine Klasse 'Player' geben soll, und ob "Player" nicht vielleicht abstrakt sein sollte, damit man später "HumanPlayer" und "ComputerPlayer" davon ableiten kann, und ob nicht vielleicht (in Anlehung an das "Model-View-Controller"-Pattern) lieber ein "GameModel" exisiteren sollte, das NICHTS darüber weiß, wie das GUI aussieht (oder OB es überhaupt ein GUI gibt!), und ob die GameView (also das GUI) dann vielleicht im GameModel nachsieht, welche Player es gibt, und für jeden Player auf dem Spielbrett dann eine Spielfigur darstellt, weiß ich nicht - aber ... vielleicht tut ihr es ja :wink:

BTW: Eigentlich sollte ALLE fields 'private' (oder protected) sein, und man sollte nur über passende Methoden darauf zugreifen können.
 
J

java.jason

Gast
Hallo Marco13,

vielen Dank jetzt scheint es zumindest ein wenig zu funktionieren.
Ich weiß das der Code alles andere als optimal ist. Die Trennung von Anwendungslogik und Gui will mir aber nicht so recht gelingen.

ComputerPlayer... du überschätzt mich aber maßlos :p In zwanzig Jahren vielleicht. Vorerst ist ein ziemlich simpler Monopoly Clone geplant, mit stark reduzierten Funktionen.

Wo steckte denn jetzt das Problem genau? Daran das ich immer wieder spielfeld_center.panel1.add(bild2); aufgerufen habe?
Was tut denn die Funktion doLayout() genau?

Na ja ich spüre gerade wie meine Motivation nach zwei Wochen feststecken wieder kommt.

Danke!!!
java.jason
 

Marco13

Top Contributor
Um die Frage definitiv zu beantworten, müßte man sich den Code vom GridBagLayout ansehen. (Und ich verwende
die Klasse ja schon nicht gerne - da werd' ich mir bestimmt nicht den Code antun :autsch: :wink: ). Aber die Tatsache, dass die Dinger mehrmals hinzugefügt wurden, ist zumindest ein sehr wahrscheinlicher Grund.

Das doLayout war ehrlich gesagt auch nur ein "Notbehelf". Normalerweise reicht ein "validate", wenn man Components entfernt oder hinzugefügt hat, aber in diesem Fall wurden ja keine Components hinzugefügt oder entfernt, sondern nur die GridBagConstraints geändert - damit er DAS mitkriegt, muss man ihm offenbar SEHR deutlich sagen: Jetzt mach aber mal!!! :wink:

Noch als keiner Nachtrag: Die Zeilen wie
Code:
int x = Integer.valueOf(einInt).intValue();
sind ... ähm - ja. Also dort wird aus einem int ein Integer gemacht, von dem man sich dann die intValue holt (also den int :roll: ) Man könnte auch einfach schreiben
Code:
int x = einInt;
 
J

java.jason

Gast
Eine Frage hab ich jetzt doch noch :p
Die ActionPerformed Methode sollte ja korrekterweise in das GameModel. Leider benötige ich jedoch mehrere ActionPerformed Methoden (eine für den Würfel Button und eine für das Menü).
Wie schreibe ich das denn konkret?
Momentan adde ich den ActionListener mit:

addActionListener(gamemodel);

GameModel implementiert dann ActionListener. Wie funktioniert das denn wenn ich mehrere ActionListener habe?
 

Marco13

Top Contributor
Hm. Ich finde nicht, dass die actionPerformed selbst in das GameModel gehört. Stattdessen sollte das GameModel nur die Methoden anbieten, die (zum Beispiel) von einem ActionListener aufgerufen werden (oder von irgendjemand anderem - das ist ja dann egal :D )

Also nicht so
Code:
class GameModel implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        player[x].doSomething();
        doSomethingElse();
        x+=123;
        doYetSomethingElse();
    }
}

Sondern
Code:
class GameModel
{
    public void doAllTheStuff()
    {
        player[x].doSomething();
        doSomethingElse();
        x+=123;
        doYetSomethingElse();
    }
}

Aufgerufen wird diese Methode dann von außen - entweder vom Controller (d.h. der Klasse, die GUI und Modell verbindet) oder von einem anonymen ActionListener (falls da nicht etwas konkretes dagegen spricht). Sinngemäß, und nur zur Verdeutlichung: Sie könnte dann also z.B. so aufgerufen werden
Code:
class GameController implements ActionListener
{
    private GameModel gameModel;
    private GameView gameView;

    void foo()
    {
         gameView.addThisSpecialActionListener(this); // Hängt 'this' als actionListener an irgendeinen Button im GUI
    }
    public void actionPerformed(ActionEvent e)
    {
         gameModel.doAllTheStuff();
    }
}
oder so
Code:
class GameView
{
    public GameView(final GameModel gameModel)
    {
          ...
         someButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent e)
            {
                 gameModel.doAllTheStuff();
            }
         });
    }
}

Ansonsten - es kann (in einigen Fällen) auch sinnvoll sein, EINEN ActionListener für mehrere ActionEvent-Quellen zu haben. Dann kann man entweder mit dem ActionCommand unterscheiden, welcher Event vorliegt, oder man kann die Source abfragen
Code:
    JButton button1 = new JButton("Hallo");
    JButton button2 = new JButton("Welt");
     
    public void actionPerformed(ActionEvent e)
    {
         // Entweder so
         if (e.getSource() == button1) { .... }

         // Oder so
         if (e.getActionCommand().equals("Hallo")) { ... }
    }
(Z.B. könnte der GameController im Beispiel oben an mehreren Buttons hängen - wenn es zu viele werden, wird's aber evtl. unübersichtlich)


Ganz subjektiv: Ich finde es immer besonders "schön" (aufgeräumt und klar) wenn in der actionPerformed nur EINE Methode aufgerufen wird (bzw. jeweils eine pro Button, bei unterschiedlichen Buttons). Damit ist der ActionListener bzw. die ActionPeformed-Methode nur eine flexible (leicht wartbare, leicht austauschbare) Verbindung zwischen dem GUI und der EINEN Methode, die ausgeführt werden soll. (Diese eine Methode liegt "häufig" direkt im Modell, muss sie aber nicht! Wenn irgendwelche komplexeren Sachen gemacht werden müssen, die evtl. auch direkt die View betreffen, kann diese Methode auch im Controller liegen!)
 
J

java.jason

Gast
So... meine kleine Applikation habe ich mittlerweile komplett neu geschrieben. Alles Membervariablen sind private oder zumindest protected. Die Actionlistener stoßen Methoden in meinem GameModel an und das berechnet fein die Werte.
Außerdem kann meine Gui Klasse auf die Variablen in GameModel zugreifen.

Frage:
Wie überrede ich denn jetzt die Gui Klasse dazu, sich nach einem Buttondruck den neuen Wert einer Variable aus GameModel zu holen? In GameModel kann ich das ja nicht mehr anstoßen, denn das kennt meine Gui Klasse ja gar nicht.
Brauche ich in dem Fall jetzt so eine Controller Klasse? Ich kann mir das irgendwie noch nicht so richtig vorstellen.

Habe deine Tipps alle befolgt Marco. Ich hoffe mein Code ist jetzt etwas sauberer. Auch den Array Mist habe ich rausgeworfen und benutze jetzt Points!

Danke und Gruß
java.jason
 
G

Guest

Gast
Okay dann entscheide ich mich dafür die view gleich in der ActionPerformed Methode zu updaten. Ist für mich momentan überschaubarer.

Eine letzte Frage noch:
Wie verfahre ich mit solchem Code:

Code:
    public void setSpieleranzahl(int x)
    {

        // XXX Alle entfernen
    	JContainer jpanel = new Panel();
        spielfeld_center.panel1.remove(spielfigur1.bild2);
        spielfeld_center.panel1.remove(spielfigur2.bild2);
        spielfeld_center.panel1.remove(spielfigur3.bild2);
        spielfeld_center.panel1.remove(spielfigur4.bild2);

        this.spielerzahl = x;

        switch (x)
        {
        case 2:
            System.out.println("Die Spieleranzahl beträgt: " + x);
            spielfigur1.Spielfigur_einfuegen(spielfeld_center);
            spielfigur2.Spielfigur_einfuegen(spielfeld_center);
            break;
        case 3:
            System.out.println("Die Spieleranzahl beträgt: " + x);
            spielfigur1.Spielfigur_einfuegen(spielfeld_center);
            spielfigur2.Spielfigur_einfuegen(spielfeld_center);
            spielfigur3.Spielfigur_einfuegen(spielfeld_center);
            break;
        case 4:
            System.out.println("Die Spieleranzahl beträgt: " + x);
            spielfigur1.Spielfigur_einfuegen(spielfeld_center);
            spielfigur2.Spielfigur_einfuegen(spielfeld_center);
            spielfigur3.Spielfigur_einfuegen(spielfeld_center);
            spielfigur4.Spielfigur_einfuegen(spielfeld_center);
            break;
        default:
            System.out.println("Bitte Spieleranzahl auswählen!");
            break;
        }
    }

Der gehört doch eigentlich eher (zumindest teilweise) in die Gamecontrol Klasse. Aber die Kennt Objekte wie spielfeld_center und panel1 ja gar nicht mehr. Dafür weiß meine Gamecontrol Klasse aber wie viele Spieler es gibt.
Meine Klassen haben Kommunikationsschwierigkeiten!
 
J

java.jason

Gast
Außerdem kann ich ja auch in meinen ActionPerformed Methoden nicht auf die panels die ich in der Gui anlege zugreifen :(

Code:
		JButton button = new JButton("Würfeln");
		button.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
            	System.out.println(gamemodel.spielerzahl);
            	panel3.add(gamemodel.setSpieleranzahl()); //gibt ein JLabel zurück
            	panel3.validate();
            }
        });

Funktioniert nicht, da die abstrakte Methode panel3 gar nicht geht.
 
J

java.jason

Gast
Okay, hab es jetzt verstanden und mir gerade selbst geholfen.
Vielen Dank für die tollen Tipps. Bin jetzt echt ein ganzes Stück weiter.
 

homeboy

Mitglied
hi

ich hab da ein Problem in meiner do while schleife folgende Problemsbeschreibung,

die schleife wird in der 1. eingabe komplett richtig durchlaufen(also auch die if else zweige), aber dannach muss ich wieder jede eingabe 3 mal tätigen, bis damit weiter gearbeitet wird.

ich finde den fehler nicht

quellcode:

Code:
void aufgabe3() throws IOException
	{
		//Die Zufallszahl ist eine belibige Zahl zwischen 1 & 100
		int zufallszahl = (int)(100.0 * Math.random() + 1);
		int anwenderzahl;
		System.out.println("\nAufgabe 3: Zahlenraten.");
		System.out.println("Bitte geben Sie eine Zahl zwischen 1 und 100 ein, um die" +
				" gesuchte Zahl zu erraten");
		System.out.println(zufallszahl);
		do
		{
			anwenderzahl = TastaturEingabe.erfasseInt();
			if (anwenderzahl < zufallszahl)
			{
				System.out.println("Ihre Zahl ist kleiner als die gesuchte Zahl");
				System.out.println("Versuchen Sie es doch noch einmal");
			}
			else
			{
				if (anwenderzahl > zufallszahl)
				{
					System.out.println("Ihre Zahl ist größer als die gesuchte Zahl");
					System.out.println("Versuchen Sie es doch noch einmal");
				}
				else
				{
					System.out.println("Glückwunsch!");
					System.out.println("Sie haben die Zahl erraten");
					System.out.println("Wollen Sie weiter spielen?");
					weiter();
				}
			}//end else
		}//end do
		while(!(weiter().equals("N")) && !(weiter().equals("n")));
	}//end aufgabe3()
also an der main & der klasse tastatureingabe, stimmt schon alles...die nimmt halt den integer auf
über ne hilfe würd ich mich freund[/code]
 
G

Gast

Gast
while(!(weiter().equals("N")) && !(weiter().equals("n")));


Das kann man schöner machen:

while(!(weiter().equalsIgnoreCase("n"))

Dann ist Groß/Kleinschreibung egal
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Array, geschachtelte For-Schleifen Java Basics - Anfänger-Themen 34
L Schleifen und Array, nur letzte Eingabe wird ausgegeben Java Basics - Anfänger-Themen 3
X Array Ausgabe bei Verwendung von 2 Schleifen erklären Java Basics - Anfänger-Themen 8
G Schleifen-Array erhöhung Java Basics - Anfänger-Themen 2
loadbrain Array vergleich mit 2 for schleifen Java Basics - Anfänger-Themen 6
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
Chris.089 2 Werte im Array tauschen Java Basics - Anfänger-Themen 6
D EinMalEins mithilfe einer for-Schleife und Array Java Basics - Anfänger-Themen 1
L Unbekanntes Problem mit 2d Array Java Basics - Anfänger-Themen 6
L Gridmuster in einem Array Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben