日期:2014-05-20  浏览次数:20825 次

关于一道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