问题在代码注释里。我的一个不带花括号的写法:
//i=0;输出0,2,3,5,9,17,33,65 2的0次方加1,2的1次方加1,2的2次方加一......
import static java.lang.Math.*;
public class DoWhile01 {
public static void main(String[] args) {
int i=0;
do {
if(i==0)
{System.out.println(i);}
else//现在是没写花括号,电脑默认只执行第一行,输出正确
System.out.println(Math.pow(2, i) + 1);
i++;
}
while (i < 7);
}
}
代码运行如下
我后来一想还是加上花括号的好,毕竟那样更容易阅读,于是改了一下:
import static java.lang.Math.*;
public class DoWhile01 {
public static void main(String[] args) {
int i=0;
do {
if(i==0)
{System.out.println(i);}
else {//我的idea直接将else这小段代码改成灰色
System.out.println(Math.pow(2, i) + 1);
i++;
}
}
while (i < 7);
}
}
结果一直在输出0,再一看发现是i++写错地方了,在else里面同时i由无法自增满足不了执行else语句的条件,这就只能一直输出0了。这也可以看出我第一次的代码纯属歪打正着,运气好了😓。
第二次改动,将花括号覆盖的范围缩小到第一行,使得i++不受第一次的选择判断影响
import static java.lang.Math.*;
public class DoWhile01 {
public static void main(String[] args) {
int i=0;
do {
if(i==0)
{System.out.println(i);}
else {
System.out.println(Math.pow(2, i) + 1);
}
i++;
}
while (i < 7);
}
}
成功输出!!!
总结:if else语句中花括号起着标记领域的作用,else的执行语句就是花括号里的所有代码。如果省去花括号的书写,那么要执行的只是第一个分号之前的代码。写花括号,不仅可以减少bug,并且可以从一个一个的模块加深对自己写的代码的理解。