02. november 2001 - 19:27Der er
13 kommentarer og 1 løsning
Problem med udregning
Hvorfor viser den ikke noget nor man foreksempel trykke \"Vienna\" og \"Three stars\" ?
<?php $Price=500; $StarModifier=1; $CityModifier=1; if (Grade==\"Three\") { if($destination==\"Barcelona\") { $CityModifier=2; $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination==\"Vienna\") { $CityModifier=3.5; $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination ==\"Prague\") { $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; } else { echo (\"You\'we not entered a value for destinatin, go back and do id again\"); } } elseif ($Grade==\"Four\") { $StarModifier=2; if ($destination ==\"Barcelona\") { $CityModifier=2.5; $Price = $Price * $CityModifier * $StarModifier=2; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination==\"Vienna\") { $StarModifier=4; $Price = $Price * $CityModifier * $StarModifier; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination==\"Prague\") { $Price = $Price * $CityModifier * $StarModifier; echo (\"The cost for a week in $destination is $Price\"); } else { echo (\"You\'we not entered a value for destinatin, go back and do id again\"); } } else { echo (\"You\'we not entered a value for destinatin, go back and do id again\"); } ?>
Det eneste jeg har ændret i det følgende er whitespace. Dvs. linjeskift, tabulatorer og mellemrum:
<?php $Price=500; $StarModifier=1; $CityModifier=1; if (Grade==\"Three\") { if($destination==\"Barcelona\") { $CityModifier=2; $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination==\"Vienna\") { $CityModifier=3.5; $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination ==\"Prague\") { $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; } else { echo (\"You\'we not entered a value for destinatin, go back and do id again\"); } } elseif ($Grade==\"Four\") { $StarModifier=2; if ($destination ==\"Barcelona\") { $CityModifier=2.5; $Price = $Price * $CityModifier * $StarModifier=2; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination==\"Vienna\") { $StarModifier=4; $Price = $Price * $CityModifier * $StarModifier; echo \"The cost for a week in $destination is $Price\"; } elseif ($destination==\"Prague\") { $Price = $Price * $CityModifier * $StarModifier; echo (\"The cost for a week in $destination is $Price\"); } else { echo (\"You\'we not entered a value for destinatin, go back and do id again\"); } } else { echo (\"You\'we not entered a value for destinatin, go back and do id again\"); } ?>
Enten har jeg gjort noget galt, eller også har du. Jeg synes i hvert fald det er rimeligt tydeligt, at det ikke hænger sammen. Især til sidst, hvor der står } i starten af to linjer i træk. Der er vist en } som ikke har en matchende {.
Du kan i øvrigt lige prøve at sætte error_reporting til E_ALL, så den også viser notices. Så vil du sikker få at vide, at der er et problem på denne linje: if (Grade==\"Three\") { - du har vist glemt et dollartegn!
I øvrigt er hele den kodestump noget værre noget. :) Du kan se, at du har valgt en uheldig løsning bla. fordi du skriver det samme igen og igen. Vi har computeren til at klare de ensformige opgaver. ;-)
Kan du ikke lige prøve at fortælle *helt* præcist hvad ovenstående kode skal gøre, så skal jeg prøve at komme med en alternativ løsning, som er nemmere at overskue, og dermed nemmere at gøre fejlfri samt opdatere senere hen.
case \"BarcelonaThree\": $CityModifier=2; $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; break;
case \"BarcelonaFour\": $CityModifier=2; $StarModifier=2; $Price = $Price * $CityModifier * $StarModifier; echo \"The cost for a week in $destination is $Price\"; break;
case \"ViennaThree\": $CityModifier=3.5; $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; break;
case \"ViennaFour\": $CityModifier=3.5; $StarModifier=2; $Price = $Price * $CityModifier * $StarModifier; echo \"The cost for a week in $destination is $Price\"; break;
case \"PragueThree\": $Price = $Price * $CityModifier; echo \"The cost for a week in $destination is $Price\"; break;
case \"PragueFour\": $StarModifier; $Price = $Price * $CityModifier * $StarModifier; echo \"The cost for a week in $destination is $Price\"; break;
default: echo (\"Go back and do it again\"); break; }
function calcPrice($price, $modifiers, $grade) { if ($modifiers==null) return false; $destprice = $price * $modifiers[0]; switch ($grade) { case \'Three\': break; case \'Four\': $destprice *= $modifiers[1]; break; default: return false; } return $destprice; }
if (isset($destinations[$Dest])) { $destprice = calcPrice($price, $destinations[$Dest], $Grade); if ($destprice === false) { echo \"Illegale grade\"; } else { echo \"The cost for a week in $Dest is $destprice\"; } } else { echo \"Destination not found\"; } ?>
Jaja, der er stadig plads til forbedring. Men allerede nu er det meget lettere at tilføje nye byer, eller ændre faktorer/satser. Og så står den samme sætning kun ét sted... ;-)
Tjah, jeg synes da også at jeg skulle have noget for besværet. Men på den anden side er der ingen grund til at oprette et nyt spørgsmål for det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.