今天在写代码的时候,犯了一个简单的错误:
即在java的输出中,将双引号写成了单引号,但没有发生编译错误。
代码如下:(出错行为第10行)
public class xiti3_5
{
public static void main(String args[])
{
Fibonacci f=new Fibonacci();
int result=0,i;
for(i=0;i<10;i++)
{
result=f.jiSuan(i);
System.out.print(result+" ");
}
}
}
class Fibonacci
{
private int result;
public int jiSuan(int n)
{
if(n==0)
{
result=0;
return result;
}
else if(n==1)
{
result=1;
return result;
}
else
{
result=jiSuan(n-1)+jiSuan(n-2);
return result;
}
}
}
输出结果:
32333334353740455366
正确输出:
0 1 1 2 3 5 8 13 21 34
看到运行结果的我是惊恐的!!
而事实上,只是把双引号写成了单引号,导致运行结果和正确答案大相径庭。再加上并没有发生编译错误,所以在找bug位置的时候,并没有格外注意输出本身的问题。
而发现错误了之后,发现其实错误的结果和正确的结果是有联系的:
1.错误结果除了该有的空格没有输出之外,还将每个值加上了32,而经过查阅ASCII码表,发现32正好是space(空格)的ASCII码值。
2.也就是说,出错行的“+”实现的不是字符串拼接,而是整型数值与字符‘ ’(空格)ASCII码值的相加。在语法上没有问题,因此才没有编译错误产生。