整数算术运算中的错误

 如果一个整数被零除,将不会产生正确的结果,而是出现一个异常( exception ).在Java中,异常是标志错误的一种方法,我们将在第7章中详细地介绍。对变量或表达式应用%运算符,如果右侧的操作数是零,也将导致一个异常。

    注意,如果一个整型表达式产生的值超出了结果类型的取值范围,这个结果就会按照该数据类型的存储位数截断,结果是不正确的,而且不会得到任何提示。这样处理可以确保在程序中应用的整数类型永远能够适应由计算产生的任何结果。在有些情况下,问题可能出现在中间,即使一个表达式的最终结果在合法的取值范围内,而中间的计算超出了这个范围,也会产生截断,从而得到一个错误的结果。这里举一个常见的例子,如果你使用整型,用2000000乘以100000再除以500000,若先执行乘法运算,就不会获得正确的结果,这是因为乘法的结果超出了整型所能表示的最大值。显然,要是事先知道会发生这类问题,使用一个括号,使除法先被执行,就可以防止它的发生。但是,你要记住,整数除法产生的是一个整数结果,所以,不同的执行顺序可能会产生不同的结果。

    浮点运算

    这四种基本的算术运算符+、一、*、/同样可以应用在浮点表达式中。我们可以在另一个版本的Fruit程序中进行一些试验,这个版本我们称作AverageFruit(平分水果).试试看-个平分水果

    将Fruit.java文件按照下列程序进行修改,并另存为AverageFruit.java.如果愿意的话,你可以将前面使用的新增的代码添加到程序中,是程序在结束前等待键入Enter键。

    piblic calss AverageFruitpublic static main(string[] args)
    {
    //Delare and initialize three varlables
    double numOrange=50.OE-1;
    double numApples=1.0E1;
    double averageFruit=0.0
    averageFruit=InumOranges+numApples)/2.0
    system.out.println(Atotally fruity program)
    system.out.println(Average Fruit in +averageFruit)
    }
    }

    这段代码将产生输出结果:
    A totally fruity propram
    Average fruit is 7.5

    该程序用水果的总数除以2.0来计算它的平均数。正像你所看到的,我们在程序中使用各种形式对double型变量进行初始化,把5.0写成这种形式并不是很好的方法,它只说明你可以书写一个负数指数的数值。

其他的浮点型运算符

    你可以对浮点型变量应用++或一一运算符,其效果与整数变量一样,以1.0的幅度递增或递减浮点型变量。你可以使用前缀或后缀格式,并且每种格式的操作与整数变量完全相同。我们也可以对浮点型数值应用取模运算符%.对于如下操作;
    floatoperandl%floatperand2

    其结果为floatperand1除以floatOperand2得到一个整倍数之后的浮点型余数。例如,

    表达式12.6%5.1结果为2.4

    浮点型算术运算中的错误状态

    浮点型算术运算有可能产生两种错误状态:一种是计算结果超出了取值范围:另一种是结果的数值在数学上是不确定的,比如,0除以0

    为了说明第一种错误,我们可以用一个变t记载水果(fruit)的种类数目,可以定义为:
    double fruitTypes=2.0

    然后再重新编写计算式:
    averageFruit*(numoranges+numApples)/fruitTypes;

    这样更改对其本身来说并没有什么特别的意义,但是当fruitypes为0.0时,这个程序的输出结果将是:
    A toxally fruity program
    Average  fruit is Tnfini.ty

    Infinity表示正无穷大,即大于dOUble类型所能表示的最大数值。负无穷大将输出-Infinity.实际上,你并不希望被零除,任何计算结果只要超出double类型所能表示的最大数值,就会产生这样的结果。例如。用一个非常小的数值重复进行除运算,例如,1.OE-300就会产生一个超出范围的结果。

    如果你想看看不确定数值的样子,就可以用下面这条语句替代计算averageFruat的语句:
    averageFruit={numOranges-5.0)/(numApples-10.0);

    这条语句没有什么实际意义,但它可以产生一个不确定的数值。averageFruit将输出结果NaN.这个值被称为Not-a-Number(非数字),表示不确定的数值。

    一个被赋予不确定值的变量将中断任何使用它的表达式,并且产生结果:N当用一个有穷数值与一个正无穷或负无穷数值进行加、减或乘运算时,结果还是正无穷或负无穷,但是如果你用任何有穷数值除以正无穷或负无穷数值时其结果为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫一样的女子245

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值