流程控制

◇◆丶佛笑我妖孽 提交于 2020-01-20 00:57:37

流程控制(1)

  1. java中流程控制关键词:
    • if-else
    • while
    • do-while
    • for
    • return
    • break
    • switch

⚠️java不支持goto


流程控制(2)

  1. 所有条件语句都使用条件表达式的真或假(truefalse)来决定执行路径,例:
x == y

⚠️java不允许将数字作为boolean表达式。


流程控制(3)

  1. if-else,例:
if(Boolean-expression) 
    statement

或者

if(Boolean-expression) 
    statement
else
    statement
  1. 代码示例
package operators;

import static net.mindview.util.Print.print;

/**
 * @author vincient
 * @create 2020-01-19 10:12 AM
 */
public class IfElse {
    static int result = 0;

    static void test(int testval, int target) {
        if (testval > target) {
            result = +1;
        } else if (testval < target) {
            result = -1;
        } else {
            result = 0;
        }
    }

    public static void main(String[] args) {
        test(10, 5);
        print(result);
        test(5, 10);
        print(result);
        test(5, 5);
        print(result);
    }
}
/**
 * 输出
 * 1
 * -1
 * 0
 */

流程控制(4)

  1. while循环语句,例:
while(Boolean-expression) 
    statement

while型式的表达式,在每次循环前先计算Boolean-expression
代码示例:

package operators;

/**
 * @author vincient
 * @create 2020-01-19 10:30 AM
 */
public class WhileTest {
    static boolean condition(){
        boolean result = Math.random() <0.99;
        System.out.print(result + ", ");
        return result;
    }

    public static void main(String[] args) {
        while (condition()) {
            System.out.println("Inside 'while'");
            System.out.println("Exited 'while'");
        }
    }
}

//    结果示例
//    true, Inside 'while'
//    Exited 'while'
//    true, Inside 'while'
//    Exited 'while'
//    true, Inside 'while'
//    ···
//    false, 

  1. do-while循环语句,例:
do 
    statement
while(Boolean-expression);

do-while和while的区别,do-while中的statement至少执行一次,不管Boolean-expression第一次计算结果是否为false,while的话,如果一开始Boolean-expression计算结果为false,statement不会执行。
3. for循环语句,例:

for(initialization; Boolean-expression; step)
    statement

initialization,Boolean-expression和step都可以为空。布尔表达式在每次迭代之前执行。在布尔表达式计算为false以前,会一直执行for语句之后的代码行。在每次循环之后,执行step。
代码示例:

package operators;

/**
 * @author vincient
 * @create 2020-01-19 11:05 AM
 */
public class ListCharacters {
    public static void main(String[] args) {
        for (char c = 0; c < 128; c++) {
            if (Character.isLowerCase(c)) {
                System.out.println("value: " + (int) c + " character: " + c);
            }
        }
    }
}
//    输出结果
//    value: 97 character: a
//    value: 98 character: b
//    value: 99 character: c
//    value: 100 character: d
//    value: 101 character: e
//    value: 102 character: f
//    value: 103 character: g
//    value: 104 character: h
//    value: 105 character: i
//    value: 106 character: j
//    value: 107 character: k
//    value: 108 character: l
//    value: 109 character: m
//    value: 110 character: n
//    value: 111 character: o
//    value: 112 character: p
//    value: 113 character: q
//    value: 114 character: r
//    value: 115 character: s
//    value: 116 character: t
//    value: 117 character: u
//    value: 118 character: v
//    value: 119 character: w
//    value: 120 character: x
//    value: 121 character: y
//    value: 122 character: z
  1. 逗号运算符,仅用于for循环中,可以用来定义多个变量,但是每个变量必须是相同类型的。
    代码示例:
package operators;

/**
 * @author vincient
 * @create 2020-01-19 11:23 AM
 */
public class CommaOperator {
    public static void main(String[] args) {
        for (int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
            System.out.println("i = " + i + " j = " + j);
        }
    }
}
//    输出结果:
//    i = 1 j = 11
//    i = 2 j = 4
//    i = 3 j = 6
//    i = 4 j = 8

流程控制(5)

  1. Foreach语法:更简明的for语法。
    代码示例:
package operators;

import java.util.Random;

/**
 * @author vincient
 * @create 2020-01-19 12:49 PM
 */
public class ForEachFloat {
    public static void main(String[] args) {
        Random rand = new Random(47);
        float f[] = new float[10];
        for (int i = 0; i < 10; i++) {
            f[i] = rand.nextFloat();
        }
        for (float x : f) {
            System.out.println(x);
        }
    }
}

//    输出结果
//    0.72711575
//    0.39982635
//    0.5309454
//    0.0534122
//    0.16020656
//    0.57799757
//    0.18847865
//    0.4170137
//    0.51660204
//    0.73734957
  1. 任何返回数组的方法都可以使用foreach
    代码示例:
package operators;

/**
 * @author vincient
 * @create 2020-01-19 12:58 PM
 */
public class ForEachString {
    public static void main(String[] args) {
        for (char c : "An African Swallow".toCharArray()) {
            System.out.print(c + " ");
        }
    }
}
//    输出结果
//    A n   A f r i c a n   S w a l l o w 
  1. foreach还适用于任何可迭代的对象
  2. for语句需要在整数值序列中步进,例如:
for(int i = 0; i < 100; i++)

流程控制(6)

  1. return: 无条件分支关键词。
  2. 其他无条件分支关键词包括breakcontinue,以及类似goto功能的语句
  3. 无条件分支:无需测试即可发生的分支
  4. return有两个用途:
    • 表明不使用void作为返回值的方法的返回值,
    • 结束当前方法。

流程控制(7)

  1. breakcontinue:控制循环流程
  2. break离开循环
  3. continue离开当前循环,开始下一轮循环
    代码示例:
package operators;

import static net.mindview.util.Range.range;

/**
 * @author vincient
 * @create 2020-01-19 3:37 PM
 */
public class BreakAndContinue {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            if (i == 74) break;
            if (i % 9 != 0) continue;
            System.out.print(i + " ");
        }
        System.out.println();
        for (int i : range(100)) {
            if (i == 74) break;
            if (i % 9 != 0) continue;
            System.out.print(i + " ");
        }
        System.out.println();
        int i = 0;
        while (true) {
            i++;
            int j = i * 27;
            if (j == 1269) break;
            if (i % 10 != 0) continue;
            System.out.print(i + " ");
        }
    }
}
// 输出结果
// 0 9 18 27 36 45 54 63 72
// 0 9 18 27 36 45 54 63 72
// 10 20 30 40 
  1. 无限循环:
    • while(thue)
    • for(;😉

流程控制(8)

  1. goto:汇编语言中流程控制的起源。
  2. goto是源码级别的跳转。
  3. java中的goto和break和continue关键词有关,都使用label机制。例如
label1: 
outer-iteration{
    inner-iteration{ 
        //...
        break; // (1) 
        //...
        continue; // (2) 
        //...
        continue label1; // (3) 
        //...
        break label1; // (4)
    }
}
  • 意义:中断循环,回到标签所指定的地方
  • 语句(1):跳出内部迭代,执行外部迭代
  • 语句(2):开始下一轮内部迭代
  • 语句(3):中断内外迭代,转到label1,然后从外部迭代开始
  • 语句(4):中断内外迭代,转到label1,不再重新进入迭代
    代码示例:
package operators;

import static net.mindview.util.Print.print;

/**
 * @author vincient
 * @create 2020-01-19 4:50 PM
 */
public class LabeledFor {
    public static void main(String[] args) {
        int i = 0;
        outer:
        for (; true; ) {
            inner:
            for (; i < 10; i++) {
                print("i = " + i);
                if (i == 2) {
                    print("continue");
                    continue;
                }
                if (i == 3) {
                    print("break");
                    i++;
                    break;
                }
                if (i == 7) {
                    print("continue outer");
                    i++;
                    continue outer;
                }
                if (i == 8) {
                    print("break outer");
                    break outer;
                }
                for (int k = 0; k < 5; k++) {
                    if (k == 3) {
                        print("continue inner");
                        continue inner;
                    }
                }
            }
        }
    }
}
// 输出结果
//i = 0
//continue inner
//i = 1
//continue inner
//i = 2
//continue
//i = 3
//break
//i = 4
//continue inner
//i = 5
//continue inner
//i = 6
//continue inner
//i = 7
//continue outer
//i = 8
//break outer
package operators;

import static net.mindview.util.Print.print;

/**
 * @author vincient
 * @create 2020-01-19 5:09 PM
 */
public class LabeledWhile {
    public static void main(String[] args) {
        int i = 0;
        outer:
        while (true) {
            print("Outer while loop");
            while (true) {
                i++;
                print("i = " + i);
                if (i == 1) {
                    print("continue");
                    continue;
                }
                if (i == 3) {
                    print("continue outer");
                    continue outer;
                }
                if (i == 5) {
                    print("break");
                    break;
                }
                if (i == 7) {
                    print("break outer");
                    break outer;
                }
            }
        }
    }
}
//输出结果:
//Outer while loop
//i = 1
//continue
//i = 2
//i = 3
//continue outer
//Outer while loop
//i = 4
//i = 5
//break
//Outer while loop
//i = 6
//i = 7
//break outer
  1. 原则:
    • continue回到最内层循环的开始继续执行
    • 带标签的continue回到label标记处并重新进入label所标记的循环
    • break弃用当前循环后面的部分
    • 带标签的break弃用标签标记的循环后面的部分
  2. 使用labels的唯一理由是当循环嵌套时breakcontinue一层内循环以上

流程控制(9)

  1. switch:选择语句
  2. switch语句的常见格式:
switch(integral-selector){
    case integral-value1 : statement; break;
    case integral-value2 : statement; break; 
    case integral-value3 : statement; break;
    case integral-value4 : statement; break;
    case integral-value5 : statement; break;
    // ...
    default: statement;
}
  1. integral-selector用于生成整数值
  2. 当integral-selector生成的整数值和某个integral-value相匹配时,相关的语句就会执行。如果没有匹配上,则执行default语句
  3. break是可选的。break使代码执行跳转到switch主体的末尾。如果break丢失了,则依序执行剩余case语句,直到遭遇某个break
    示例代码:
package operators;

import java.util.Random;

import static net.mindview.util.Print.print;
import static net.mindview.util.Print.printnb;

/**
 * @author vincient
 * @create 2020-01-19 5:56 PM
 */
public class VowelsAndConsonants {
    public static void main(String[] args) {
        Random rand = new Random(47);
        for (int i = 0; i < 100; i++) {
            int c = rand.nextInt(26) + 'a';
            printnb((char) c + ", " + c + ": ");
            switch (c) {
                case 'a':
                case 'e':
                case 'i':
                case 'o':
                case 'u':
                    print("vowel");
                    break;
                case 'y':
                case 'w':
                    print("Sometimes a vowel");
                    break;
                default:
                    print("consonant");
            }
        }
    }
}
//输出结果:
//y, 121: Sometimes a vowel
//n, 110: consonant
//z, 122: consonant
//b, 98: consonant
//r, 114: consonant
//n, 110: consonant
//y, 121: Sometimes a vowel
//g, 103: consonant
//c, 99: consonant
//f, 102: consonant
//o, 111: vowel
//w, 119: Sometimes a vowel
//z, 122: consonant
//...
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!