SEO-Software von Suchmaschinenoptimierung.de

if abfragen

(hier klicken, um zum Original Thread zu gelangen)
ozzy
hi leute

ich hab mal wieder eine frage smile

anmerkung: ich programmier nur zum fun, ich weiss es geht mit sicherheit besser, aber ich plane einfach nicht und schreib mein programm halt so runter wie es mir gerade einfaellt großes Grinsen

gibt es eigentlich ein limit an if else verschachtelungen ???
ich hab jetzt eine grosse menge an abfragen, alles funktioniert wunderbar, ich fuege eine if abfrage dazu und es faeng an zu spinnen?


code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
	public int wincheck() {
	 int c, u ;
	 int i ;
	 int[] p = new int[2] ;
	 int[] w = new int[16] ;
	 boolean bp = false ;
	 boolean ggk = false ;
	 
	 u = 0; c = 0;
	 
	  for (i=0; i < 5; i++) 
	   ++w[posblatt[i][0]] ;

	
	  for (i=0; i < 16; i++) {
	   if(w[i] > 1) {
		p[u] = w[i] ;
		if (i > 7)
		 bp = true ;
		u++ ;   
	   }
	   if(w[i] == 1)
		if (i > 7)
		 ggk = true ;
	  }
	  if (u > 1) {
		if (p[0] == p[1])
		 if (w[15] == 1)
		  c = 8 ;
		 else
		  c = 7 ;	
		else
		 c = 8 ;
	  } else {
		 if (p[0] == 2 && w[15] != 1) {
		  if (bp)
		   c = p[0] ;
		  else
		   c = 0 ;
		 }
		 else {
		 if (w[15] == 1)
		  c = p[0]+1 ;
		 else
		  c = p[0] ; }  
	  }
	  
	  
	  return c ;	
	}


also dieser teil funktioniert einwandfrei. variablen die drinnen sind und noch nicht benutzt werden sind schon fuer mehr abfragen gedacht) hab jetzt zwar keine ahnung obs wichtig ist aber ich schreibs halt dazu
ueberpruefe mit dem code 5 karten (poker halt)
1 paar ab karte 10
2 paar ab karte 2
3 gleiche
4 gleiche
5 gleiche (mit joker)

ups vergessen
full house
2 paar + joker = full house

wie geschrieben funktioniert einwandfrei, schon mehrere stunden smile getestet.
als ich jetzt am ende weitere abfragen hinzufuegen wollte faengt es an zu spinnen.
einzeln getestet:

ergebnis = 0 also kein gewinn funktioniert
ist joker da = ja/nein funktioniert
ist eine karte groesser als 9 vorhanden funktioniert.

wenn ich jetzt versuche diese zu kombinieren in diesem sinne
ergebnis = 0 && joker ja && karte groesser als 9
tja dann, auch wenn dieser fall eintreten sollte wirds nicht angezeigt. jetzt hab ich noch weitere versuche gestartet mit anderen variationen versucht. jetzt ist was ganz eigenartiges geschehen, die im oberen teil geschriebene abfrage funktioniert nicht mehr korrekt. an stelle von einem paar ab der karte 10 als gewinn anzuzeigen wird auch ein paar kleiner als 10 angezeigt????????

jetzt nochmal meine frage gibt es eine begrenzung an if else abfragen? Baby

ach ja die zusaetzlichen abfragen fuege ich zwischen return c und der } davor ein
derletztekick
Hi,

da Deine primäre Frage die verschachtlung war: Nein, es gibt kein Linit!

Micha
ozzy
hi,

thx mal fuer die antwort, kann ich ja mal dieses ausschlieszen.
voll witzig und ich weisz nicht mehr weiter smile

code:
1:
2:
3:
4:
	if (c == 0 && ggk) {
	   c = 4 ;
	  if (w[15] != 1)
	   c = 5 ; }	  


w[15] ist definitiv 1 wenn ein joker kommt, im code oben ist c = immer 5 wenn kein joker kommt
jetzt kommts

code:
1:
2:
3:
4:
	if (c == 0 && ggk) {
	   c = 4 ;
	  if (w[15] == 1)
	   c = 5 ; }	  


c = 0 wenn ein joker kommt ??? warum ???
hier hab ich mich auch vertippt c=1 sollte es eigentlich sein,
derletztekick
Hi,

weil wohl nicht das in den Variablen steht, was Du vermutest. Ist ggk denn auch true?

Die zweite If-Bedingung kann nie erreicht werden. Der Fall, das c == 0 ist und w[15] == 1 tritt _nie_ ein. "Sinnvoll", denn eigentlich macht es gar kein Sinn, kann hier nur folgendes sein:

code:
1:
2:
3:
4:
5:
6:
7:
8:
if (c == 0 && ggk) {
      c = 4;
      if (w[15] != 1)
        c = 5;
      else if (w[15] == 1)
        c = 5;
    }


Das hättest Du ganz leicht durch ein System.out.println() testen können, in welche Bedingung er geht.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 29.08.2006
  * @author Michael Loesler - http://derletztekick.de
  */

public class test {

  public static void main(String[] args) {
    boolean ggk = true;
    int c = 0;
    int w[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,  1};

  
    if (c == 0 && ggk) {
      c = 4;
      if (w[15] != 1)
        c = 5;
      else if (w[15] == 1)
        c = 5;
    }

    
    System.out.println(c);
    
  }
}



Micha
ozzy
hi,

naja das problem ist folgendes ich kenn den inhalt der variablen ja
denn wenn ich sie einzeln abfrage funktionierts ja, das seh ich ja an den karten und der gewinn ausgabe.

nur wenn ich sie wie beschrieben verschachtel funktionierts nicht.

c = 0
ggk = true
w[15] = 1

das ist so sicher wie das amen im gebet, denn im code ganz oben funktionierts ja und einzeln wenn ich sie abfrage funktionierts auch nur nicht wenn ich sie gemeinsam abfragen will.

also angenommen die fuenf karten waeren

zwei, vier, acht, dame, joker

also somit ergibt sich c = 0 da kein paar oder mehr
ggk = true da dame im blatt
und w[15] = 1 da joker
aber die abfrage funktioniert nur einzeln und nicht zusammen ich bin am verzweifeln. der code davor funktioniert genauso. und da machts ja was machen soll traurig
derletztekick
Hi,

Du konntest mir Dein Problem noch nicht schlüssig erklären. Was hast Du an meinem Beispielcode nicht verstanden? Macht er nicht das, was Du wolltest? Wenn Du drei sachen abfragst, dann tu das doch:

code:
1:
2:
3:
if (c==0 && ggk &&w[15] == 1)
//mache...


Ich kenne das Spiel und Deinen Quellcode nicht. Beides will ich auch nicht sehen, da Dein Problem wohl nur eine von Dir falsch gestellte Bedingung ist. Wenn Du Dir konsequent alles ausgibst, hättest Du den Fehler auch entdecken müssen. Lass Dir in jeder if-Bedingung ausgeben, welche Werte nun die Variablen haben und, in welcher Deiner Bedingungen sie überschrieben wurden.

Micha
ozzy
hi,

naja aber das mach ich doch.

ich seh die karten und lass mir dazu ein ergebnis anzeigen. wie im oberen teil schon geschrieben funktioniert dies sehr gut.

wenn ich nun die abfrage wie du vorgeschlagen hast durchfuehre, dann kann ich nichts sehen (da geb ich dir recht), aber deshalb hab ich auch die abfragen einzeln gemacht und siehe da jede variable hat den wert den ich erwarte, wenn eine bestimmte kartenkombination kommt.

weiters ist es auch schon geschehen, dass ploetzlich der erste teil nicht mehr richtig laeuft. (aber nur wenn ich eine bestimmte reihenfolge von abfragen anhaenge, ich konnte den fehler bis jetzt nicht mehr erzeugen). deshalb sehr eigenartig, da ich am oberen teil nichts veraendert habe.

oder kann es daran liegen, dass ich java 1.5.0_08-b03 verwende
derletztekick
Hi,

ich glaube wir verstehen uns noch nicht so ganz. Zunächst, an Deiner JRE liegt es sicher nicht...

Dein Beispiel:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
//1. If-Bedingung
if (c == 0 && ggk) {
  c = 4 ;
  System.out.println("Test1 "+c+"  "+w[15]);
  if (w[15] != 1){
    System.out.println("Test2 "+c+"  "+w[15]);
    c = 5 ; 
  }
}	
System.out.println("Zwischen if "+c+"  "+w[15]);
//2. If-Bedingung
if (c == 0 && ggk) {
  c = 4 ;
      System.out.println("Test3 "+c+"  "+w[15]);
  if (w[15] == 1) {
    System.out.println("Test4 "+c+"  "+w[15]);
    c = 5 ;
  }
}


Nenn mir eine Möglichkeit, das mir die Konsole "Test3" und "Test4" zurückliefert. In diesem Beispiel ist es _nie_ möglich. Du könntest die zweite if-Bedingung auch löschen, sie hat keine Funktion, da sie _nie_ wahr werden kann. Wenn Du alle Deine ifs ausgeben würdest, so wie ich das oben Beispielhaft verdeutliche, dann findet man den Fehler auch. Sollten alle Deine Verschachtlungen wie oben aussehen, dann ist es durchaus möglich, das etwas nicht funktioniert...

Micha
ozzy
hi,

jop, hattest recht, haetts mir gleich anzeigen lassen sollen. hab uebersehen, dass wenn ein joker kommt c um 1 erhoeht wird und somit nicht mehr 0 ist.

aber dein post versteh ich noch immer nicht smile

weshalb sollte es test3 und test4 nicht ausgeben.
wenn c gleich null, ggk, true ist und w15 ist eins dann muss es das auch ausgeben, da ich jetzt ausgeschlossen hab, dass c um eins erhoeht wird, wenn w15 eins ist, funktioniert es ja.

code:
1:
2:
		 if (w[15] == 1)
		  c = p[0]+1 ;


daran lags, habs jetzt geaendert in:

code:
1:
2:
		 if (w[15] == 1 && p[0] > 0)
		  c = p[0]+1 ;
derletztekick
Zitat:
Original von ozzy
weshalb sollte es test3 und test4 nicht ausgeben.
wenn c gleich null, ggk, true ist und w15 ist eins...


Zum dritten Mal, teste es doch einfach! Das kann doch echt nicht zuviel verlangt sein!

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 29.08.2006
  * @author Michael Loesler - http://derletztekick.de
  */

public class test {

  public static void main(String[] args) {
    boolean ggk = true;
    int c = 0;
    int w[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,  1};

  
//    if (c == 0 && ggk) {
//      c = 4;
//      if (w[15] != 1)
//        c = 5;
//      else if (w[15] == 1)
//        c = 5;
//    }

//1. If-Bedingung
if (c == 0 && ggk) {
  c = 4 ;
  System.out.println("Test1 "+c+"  "+w[15]);
  if (w[15] != 1){
    System.out.println("Test2 "+c+"  "+w[15]);
    c = 5 ;
  }
}
System.out.println("Zwischen if "+c+"  "+w[15]);
//2. If-Bedingung
if (c == 0 && ggk) {
  c = 4 ;
      System.out.println("Test3 "+c+"  "+w[15]);
  if (w[15] == 1) {
    System.out.println("Test4 "+c+"  "+w[15]);
    c = 5 ;
  }
}

    
    System.out.println(c);
    
  }
}


Nenn mir die Kombination, bei der test3 und 4 kommt, es gibt keine!

Micha
ozzy
hi,
jo jetzt hab ichs verstanden, du meinst die zwei abfragen waeren hintereinander. war mein fehler, die beiden bloecke sind ein abfrageblock auf verschiedene arten wobei erste funktionierte (solange kein joker kam) und zweite eben nicht (mit joker)

aber wie geschrieben hab den fehler schon gefunden im ersten teil den ich gepostet habe, da wurde c auf 1 gesetzt, wenn ein joker kam, was ich uebersehen habe. deshalb hab ich auch angenommen, dass ich den inhalt der variablen kenne.
meistens bin ich ein wenig verdreht, deshalb poste ich auch (oder versuche es zumindest) immer auf verschiedene arten, damit andere meine verdrehtheit verstehen koennen.
derletztekick
Hi,

ja, es war schon etwas konfus ;-) Aber wenn es nun geht, ist ja alles iO.

LG Micha
(hier klicken, um zum Original Thread zu gelangen)



Tipp: Ranking-Konzept.de - Das SEO-Forum (Forum rund um die Suchmaschinenoptimierung) der artaxo AG.
Das große Versicherungs ABC von Versicherung.de - mit allen Aspekten der Computerversicherungen!
Fan-Foren.de, die große Community mit Musikforum ist ab sofort online.