关于一道java面试题的分析

本文通过一个简单的Java除法运算示例,揭示了整数除法运算中常见的问题,并提供了修正方案。

有这么一道题,求两个数相除的商,有个面试者写了如下方法

public double getShang(int i,int j){
 try{
  double shang=i/j;
  return shang;
 }catch(Exception e){
  return 0;
 }
}

初略的看下,貌似没有啥问题,因为关于两个数相除最主要是要考虑到除数不能为0,为0报异常。这里有异常捕获,因而我们不考虑除数为0的情况了。即便如此,结果真的正确吗?我们将其测试一下

public class VarTest {
public static void main(String[] args) {
 VarTest test=new VarTest();
 System.out.println(test.getShang(1,2));
}
public double getShang(int i,int j){
 try{
  double shang=i/j;
  return shang;
 }catch(Exception e){
  return 0;
 }
}
}

按照上面的测试。1除以2,结果应该是0.5,但是输出的结果却是0.0,显然不正确,那么错误出在哪里呢?

在学习java时候,我们记得书上有这么一句话,两个整数相除,结果还是整数,也就是说1/2结果会是0而非0.5,那么怎么才能得到正确答案呢?

既然两个整数相除结果是整数,那么我们就将其中一个整数转化成非整数吗,即代码可以改成如下

double shang=i*1.0/j;或者double shang=(double)i/j;然后在测试一下,这时候可以得到正确的结果了

因而,作为程序员,我们平时要养成考虑各种可能发生的情况,要以计算机的思维去考虑code,多测试才能尽量减少bug

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值