第4章 控制执行流程
4.2 if-else
// 判断大小
public static void main(String[] args) {
int result = 0;
result = ifElseTest(10, 5);
outPut(result); // 1
result = ifElseTest(5, 10);
outPut(result); // -1
result = ifElseTest(5, 5);
outPut(result); // 0
}
public static int ifElseTest(int n, int target) {
if (n > target) {
return 1;
} else if (n == target) {
return 0;
} else {
return -1;
}
}
4.3 迭代
public static void main(String[] args) {
// while循环
while (Math.random() <0.8){
outPut("在while中");
}
outPut("在while外");
// do-while循环,最少执行一次
do {
outPut("在do-while中");
}while (Math.random()<0.8);
outPut("在do-while外");
// for循环(初始化;布尔;步进)
for (int i = 0; i < 10; i++) {
outPut(i);
}
// 定义多个变量(类型必须相同)
for (int i = 1,j=2;i<5;i++,j++){
outPut(i);
}
// 三个表达式可为空,此时是死循环
for (;;){
outPut("在for参数为空中");
}
}
4.4 Foreach语法
/**
* 产生[0,n)的一个整数数组
*
* @param n
* @return
*/
public static int[] range(int n) {
int[] a = new int[n];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
return a;
}
/**
* 产生[b,e)的一个整数数组
*
* @param b
* @param e
* @return
*/
public static int[] range(int b, int e) {
int[] a = new int[e - b];
for (int i = 0; i < a.length; i++) {
a[i] = b;
b++;
}
return a;
}
/**
* 产生[b,e),步长为s的整数数组
*
* @param b
* @param e
* @param s
* @return
*/
public static int[] range(int b, int e, int s) {
int[] a = new int[(e - b)/s+1];
for (int i = 0; i < a.length; i ++) {
a[i] = b;
b += s;
}
return a;
}
public static void main(String[] args) {
for (int i : range(10)) {
outPutb(i + " "); // 0 1 2 3 4 5 6 7 8 9
}
outPut("");
for (int i : range(5, 10)) {
outPutb(i + " "); // 5 6 7 8 9
}
outPut("");
for (int i : range(5, 10, 2)) {
outPutb(i + " "); // 5 7 9
}
outPut("");
}
foreach优势:
- 录入更简单;
- 更能说明在做什么,而不是展示怎么做。
4.5/4.6 return/break/continue
public static int ifTest(int val,int target){
if (val >target)
// 终止方法并返回结果
return 1;
else if (val == target)
return 0;
else
return -1;
}
public static void vTest(){
// void方法会有一个隐式的return;
return;
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 74)
// 终止迭代
break;
if (i % 10 != 0)
// 终止下面的语句,并返回迭代开始
continue;
outPutb(i + " "); // 0 10 20 30 40 50 60 70
}
outPut("");
int i = 0;
while (true) {
i++;
if (i == 74)
break;
if (i % 10 != 0)
continue;
outPutb(i + " "); // 10 20 30 40 50 60 70
}
outPut(" ");
}
4.7 臭名昭著的goto
public static void main(String[] args) {
// 标签作用于其下面的迭代语句,两者之间必须什么也没有
a:
for (int i = 0; i < 5; i++) {
outPutb("a" + " ");
for (int j = 6; j < 10; j++) {
outPutb(j +" ");
if (i ==3 && j == 8)
break a;
}
}
// 打印结果:a 6 7 8 9 a 6 7 8 9 a 6 7 8 9 a 6 7 8
}
break和continue只作用于内部迭代,当有多个迭代嵌套时,可以使用标签的形式,从内部改变外部的迭代。
4.8 switch
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
Random random = new Random();
// 产生小写26个字母对应的数字
int c = random.nextInt(26) + 'a';
// 该变量可以是byte short char int 枚举 String
switch (c) {
case 'a':
outPut("a");
break;
case 'b':
outPut("b");
break;
default:
outPut("others");
// 可有可无
break;
}
}
}