PHP: Verschachtelte IF-Abfrage - ein Problem

Hier kann über alles diskutiert werden, wirklich alles. Betonung liegt auf "diskutiert", das ist also kein Freischein zum Spammen.
(Beitragszähler deaktiviert)
Antworten
Benutzeravatar
Latzhosenträger
großer Laubbär
Beiträge: 3309
Registriert: 2. Apr 2008, 15:14

PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von Latzhosenträger » 25. Feb 2010, 17:28

Ich, ein PHP-Noob bastle gerade an etwas herum.
Ein teil davon ist es, den Handwert auf einer Hand im Kartenspiel "Schwimmen" zu errechnen. Allerdings habe ich einen Fehler darin. Ich finde ihn nicht.

Das Ergebnis ist 11, sollte aber 21 sein. Die 3 Karten (Wird im Code nicht ersichtlich) sind Pik Ass, Pik König und Kreuz 7.

Code: Alles auswählen

  <?php
  include("arrays.php");

  $karte1 = $kartenid[7];
  $karte2 = $kartenid[8];
  $karte3 = $kartenid[10];

  $kartenfarbe1 = $kartenfarbe[$karte1];
  $kartenfarbe2 = $kartenfarbe[$karte2];
  $kartenfarbe3 = $kartenfarbe[$karte3];

  $kartenwert1 = $kartenwert[$karte1];
  $kartenwert2 = $kartenwert[$karte2];
  $kartenwert3 = $kartenwert[$karte3];

  $kartenart1 = $kartenart[$karte1];
  $kartenart2 = $kartenart[$karte2];
  $kartenart3 = $kartenart[$karte3];

  $kartenname1 = $kartenname[$karte1];
  $kartenname2 = $kartenname[$karte2];
  $kartenname3 = $kartenname[$karte3];

  if($kartenfarbe1 == $kartenfarbe2)
  {
    if($kartenfarbe1 == $kartenfarbe3)
    {
	   $handwert = $kartenwert1 + $kartenwert2 + $kartenwert3;
    }
  }
  else
  {
	  $handwert = $kartenwert1 + $kartenwert2;
  }

   if($kartenfarbe2 == $kartenfarbe3)
    {
      $handwert = $kartenwert2 + $kartenwert3;
    }
  elseif($kartenart1 == $kartenart2)
    {
      if($kartenart1 == $kartenart3)
      {
        if($kartenart1 == "Ass")
             {
             $handwert = "33";
             }
        else {
                   $handwert = "30,5";
                 }
       }
	} 
  elseif(($kartenwert1 > $kartenwert2) && ($kartenwert1 > $kartenwert3))
     {
     $handwert = $kartenwert1;
     }
  elseif(($kartenwert2 > $kartenwert1) && ($kartenwert2 > $kartenwert3))
     {
     $handwert = $kartenwert2;
     }
  else
     {
     $handwert = $kartenwert3;
     }
    
echo "$handwert";
  ?>

drancer
Kaklatron
Beiträge: 36
Registriert: 8. Jun 2007, 23:08

Re: PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von drancer » 25. Feb 2010, 18:39

Ich kenn mich nicht allzu gut mit php aus, bin also auch ein Laie, aber ich denke ich kann helfen:
1.

Code: Alles auswählen

 ...
if($kartenfarbe1 == $kartenfarbe2)
  {
    if($kartenfarbe1 == $kartenfarbe3)
    {
      $handwert = $kartenwert1 + $kartenwert2 + $kartenwert3;
    }
  }
  else
  {
     $handwert = $kartenwert1 + $kartenwert2;
  }...
Da ist ein kleiner Fehler drin, das "else" bezieht sich auf das 1. if, sollte sich aber auf das 2. if beziehen.
Daher gibt dein Code dir nur den höchsten Wert aus, in deinem Fall 11, da das Ass die höchste Karte ist.

Abgesehen davon, mach das doch nicht so umständlich. Folgendes ist viel leichter zu verstehen und zu kommentieren:

Code: Alles auswählen

... Initialisierung wie gehabt...
$handwert = $kartenwert1;   //"Mindestwert" quasi
if ($kartenwert2 > $handwert)   //Werte vergleichen, falls Karte 2 größer -> neuer Handwert
   $handwert = $kartenwert2;

if ($kartenwert3 > $handwert)   //Werte vergleichen, falls Karte 3 größer -> neuer Handwert
   $handwert = $kartenwert3;


if ($kartenfarbe1 == $kartenfarbe2)   // Farbe der ersten beiden Karten -> Summe als Handwert
   $handwert = $kartenwert1 + $kartenwert2;

if ($kartenfarbe1 == $kartenfarbe3)   // Farbe der ersten und dritten Karte -> Summe als Handwert
   $handwert = $kartenwert1 + $kartenwert3;

if ($kartenfarbe2 == $kartenfarbe3)   // Farbe der letzten beiden Karten -> Summe als Handwert
   $handwert = $kartenwert2 + $kartenwert3;

if (($kartenfarbe1 == $kartenfarbe2) && ($kartenfarbe1 == $kartenfarbe3))   //alle drei Farben überprüfen
   $handwert = $kartenwert1 + $kartenwert2 + $kartenwert3;


if($kartenart1 == $kartenart2)          //den Teil hab ich von dir übernommen
    {
      if($kartenart1 == $kartenart3)
      {
        if($kartenart1 == "Ass")
             {
             $handwert = "33";
             }
        else {
                   $handwert = "30,5";
                 }
       }
   } ... 
Die ganzen Verschachtelungen find ich zu verwirrend ;)
Außerdem sieht man, wenn man die Variable $handwert andauernd verändert, eher wo der Fehler liegen kann. Man gehe zu dem Punkt, an dem $handwert der Endwert übergeben wird, alles drüber ist richtig, im Rest liegt der Fehler.

Benutzeravatar
Latzhosenträger
großer Laubbär
Beiträge: 3309
Registriert: 2. Apr 2008, 15:14

Re: PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von Latzhosenträger » 25. Feb 2010, 18:49

Super, das ist mein Fehler, ich denke zu kompliziert. :>
Manchmal hau ich mir echt an die Stirn. :D

Jetzt hab ich noch eine kleinigkeit geändert

Code: Alles auswählen

if(($kartenart1 == $kartenart2) && ($kartenart1 == $kartenart3))          //30 Halbe + Blitz
    {
        if($kartenart1 == "Ass")
             {
             $handwert = "33";
             }

        else {
             $handwert = "30,5";
               }
    }
So ists besser ;)

Danke.

Benutzeravatar
check
Nachtgonk
Beiträge: 277
Registriert: 7. Jan 2007, 20:48

Re: PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von check » 25. Feb 2010, 21:33

Wieso so umständlich?
Geschweifte Klammern sind doch nur bei Anweisungsblöcken nötig.

if($kartenart1 == "Ass")
{
$handwert = "33";
}
Hier z.B. könntest du die {} dir sparen, hilft der Übersichtlichkeit!

Benutzeravatar
mopf
Gelbbart-Yeti
Beiträge: 2240
Registriert: 6. Apr 2004, 18:11
Wohnort: hier?
Kontaktdaten:

Re: PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von mopf » 26. Feb 2010, 02:08

wieso benutzt du überhaupt so viele if else anwendungen?

nutz doch switch case. ist übersichtlicher:

http://php.net/manual/de/control-structures.switch.php
Denken, Schreiben, Abschicken. In anderer Reihenfolge funktioniert das Forennutzen nicht.

Get Lich or try dying

bwoebi
Administrator
Beiträge: 3439
Registriert: 28. Apr 2008, 19:13

Re: PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von bwoebi » 26. Feb 2010, 16:41

stetha, er sagt er wäre PHP-Noob, in der Hinsicht muss ich dir aber recht geben ;)
Bogs sind meine Spezialität - Signaturen sind eigentlich doch überflüssig...

Benutzeravatar
mopf
Gelbbart-Yeti
Beiträge: 2240
Registriert: 6. Apr 2004, 18:11
Wohnort: hier?
Kontaktdaten:

Re: PHP: Verschachtelte IF-Abfrage - ein Problem

Beitrag von mopf » 26. Feb 2010, 18:12

deswegen habe ich ja nen link mit erklärungen gepostet ;)
Denken, Schreiben, Abschicken. In anderer Reihenfolge funktioniert das Forennutzen nicht.

Get Lich or try dying

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 216 Gäste