流程控制

Posted ninety

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了流程控制相关的知识,希望对你有一定的参考价值。

流程控制

在Java中循环有4种方式分别是while、do-while、for和foreach,下面我们分别介绍.

while

while的语法为:

//while和if的语法很像,只是把if换成了while
//它表达的含义也非常简单,只要条件语句为真,就一直执行后面的代码块,知道条件为假跳出循环
while(条件语句){
    代码块
}
//例:
Scanner reader= new Scanner(System.in);
System.out.println("Please input password");
int num=reader.nextInt();
int password=6789;
while(num!=password){
    System.out.println("Please input password");
    num=reader.nextInt();
}
System.out.printLn("correct");
reader.close();

do-while

do-while的语法为

do{
    代码块
}while(条件语句);
//do-while的循环体至少执行一次
//例:
Scanner reader=new Scanner(System.in);
int password=6789;
int num=0;
do{
    System.out.println("Please input password");
    num=reader.nextInt();
}while(num!=password);
System.out.printLn("correct");
reader.close();

for循环

for

for的语法为

for(定义循环变量;循环条件的判断;循环变量的改变){
   代码块
}
//执行顺序
//(1)执行初始化指令定义循环变量;
//(2)检查循环条件是否为true,如果为false,则跳转到第6步;
//(3)循环条件为真,执行循环体;
//(4)执行步进操作;
//(5)步进操作执行完后,跳转到第2步,即继续检查循环条件;
//(6)for循环后面的语句。

foreach

foreach语法为

for (循环元素的类型 循环中的每个元素:要遍历的数组或集合){
    代码块
}

循环的嵌套

九九乘法表:
for (int i = 1; i <=9; i++) {
    for (int j = 1; j <=i ; j++) {
        System.out.print(j+"*"+i+"="+(i*j)+"     	");
    }
System.out.println();
}
for (int i = 1,j=1; i <=9 ; ) {
    System.out.print(j+"*"+i+"="+i*j+"	");
    j++;
    if (j > i) {
        System.out.println();
        i++;
        j=1;
    }
}
打印三角形:
for (int i = 1; i <= 5; i++) {
    for (int j = 1; j <= 5 - i; j++) {
        System.out.print(" ");
    }
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    System.out.println();
}
for (int i = 5; i >0 ; i--) {
    for (int j = 5-i; j > 0; j--) {
        System.out.print(" ");
    }
    for (int j = i;j>0 ; j--) {
        System.out.print("*");
    }
    System.out.println();
}
for (int i=1,j=1;i<=4;){
    System.out.print("*");
    j++;
    if (j == 6) {
        System.out.println();
        i++;
        j=1;
    }
}

循环控制

break和continue
break:作用于选择结构和循环结构,表示终止当前的一层循环.
continue:只能作用于循环结构,表示跳出当前的一次循环继续下次循环
循环的标号

实现原理

和if一样,循环内部也是靠条件转移和无条件转移指令实现的,比如下面的代码:

int[] arr = {1,2,3,4};
for(int i=0; i<arr .length; i++){
    System. out. println(arr[i]);
}

其对应的跳转过程可能为:

int[] arr={1,2,3,4};
int i=0;
条件跳转:如果i>=arr.length,跳转到第7行
System. out. println(arr[i]);
i++;
无条件跳转,跳转到第3行
其他代码

在if中,跳转只会往后面跳,而for会 往前面跳,第6行就是无条件跳转指令,
跳转到了前面的第3行。
break/continue语句也都会转换为跳转指令,具体就不赘述了。

练习

  • 判断一个数是否是质数---一个数除了1和本身不能整出其他的数字
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
for (int i = 2; i < Math.sqrt(a); i++) {
    if (a%i==0){
        System.out.println(a+"不是质数");
        return;
    }
}
System.out.println(a+"是质数");
  • 分解质因数
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
while (a !=1){
    for (int i = 2; i <= a; i++) {
        if (a % i == 0) {
            System.out.print(i + "  ");
            a /= i;
            break;
        }
    }
}

以上是关于流程控制的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段15——git命令操作一个完整流程

PHP中的流程控制

在导航控制器中杀死片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向ART 脱壳 ( DexClassLoader 脱壳 | DexClassLoader 构造函数 | 参考 Dalvik 的 DexClassLoader 类加载流程 )(代码片段

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段