2011-10-26 38 views
0

我已經創建了此功能,當試圖在Y文本框中輸入0時正確顯示無窮大符號。不過,我仍然得到零分錯誤......這是我的代碼。除零除,php

這裏是switch敘述的情況下

case '/':    
    $prod = $x/$y;  
    break; 

HH

//check for divide by 0 
function check0($y) 
{ 
    if ($y == 0) 
     throw new Exception ($prod = "&#8734"); 

    return FALSE; 
} 

try 
{ 
    check0($y); 
    $prod = $x /$y; 
}catch(Exception $zero){ 
    echo $zero->getMessage(); 
} 
+0

代碼是如何組織的?我看到一個鴻溝,然後是一個'break'(頂部沒有呼叫'check0'。 –

+0

這行是什麼?$ prod = $ x/$ y; break之前是什麼?它被一個try {...} catch {...}? –

+2

當前的答案涵蓋了它,但還有一些附加說明:爲什麼在Exception構造函數內部有一個賦值?此外,您不應該爲控制流使用異常,只需使用if語句返回 – Tesserex

回答

0

這是因爲你實際上做除法接近頂部(在case)。

2

第一個:你在第二行代碼(它可以由零代表)進行除法。

第二個:由於拋出錯誤,因此無需在方法中返回false。

第三:爲什麼在這裏使用一個異常,而不僅僅是讓你的方法返回真假和檢查之前執行devision。

第四:爲什麼有一個方法,如果你只需要檢查$ y的值。調用方法或包含if語句只需要一行代碼。

那麼,爲什麼不能只是像:

case '/':     
    if($y > 0) 
     $prod = $x/$y; 
    break; 
0

你的邏輯感覺...嗯好糾結....下面來看看這個:

<?php 
    function divide($x, $y) { 
     if ($y === 0) 
      throw new Exception("Divide By Zero"); 
     return $x/$y; 
    } 

    try { 
     $product = divide(3, 0); 
    } 
    catch(Exception $e) { 
     if ($e->getMessage() == "Divide By Zero") 
      $product = "&#8734"; 
     else 
      $product = NULL; 
    } 
    print "Product is $product\n"; 

?> 
0

在我的情況一切正常。可以肯定的是,您並未嘗試在腳本的早期階段使用它,因爲它看起來像。

case '/': 
$prod = $x/$y; 
break; 

在您的函數調用之前啓動。

0

您必須在分割之前調用check0()。如果y == 0,則應該返回FALSE,否則返回TRUE。 如果返回TRUE,則執行除法。然而,沒有必要調用一種方法來做到這一點!