2011-10-26 86 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,则执行除法。然而,没有必要调用一种方法来做到这一点!