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