Java教程

Java流程控制

本文主要是介绍Java流程控制,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

用户交互Scanner

Scanner对象

Java有一个工具类可以让我们获取用户输入,java.util.Scanner是java5的新特性。我们可以通过Scanner类来获取用户的输入。

基本语法:

Scanner s = new Scanner(System.in);	//创建一个Scanner对象
  • 通过 Scanner类的 next()与 nextLine()方法获取输入的字符串,在读取前我们一般需要使用 hasNext()与 hasNextLine()判断是否还有输入的数据。

  • next()

      1. 需要读取到用户输入,程序才能继续跑下去
      2. 遇到有效字符前的空白,next()方法会把它们丢弃
      3. 遇到有效字符后的空白是 next()方法的结束符,所以只能读取一个单词。
  • nextLine()

      1. 以Enter键作为结束符,即nextLine()方法返回的是输入回车之前的所有字符。
      2. 可以读取空白字符。

顺序结构

  • Java的基本结构就是顺序结构,除非特别说明,否则程序就是按顺序一句一句执行。
  • 顺序结构是最简单的算法结构。

顺序结构.png

  • 顺序结构是任何一个算法都离不开的一种基本算法结构。

选择结构

  • if单选择结构
  • if-else双选择结构
  • if-else if-else多选择结构
  • 嵌套的if结构
  • switch多选择结构

if单选择结构

判断一个条件是否正确,正确的话就去执行,我们需要一个 if语句实现。

  • 语法
if (判断条件) {
    // 如果条件为true就执行结构体语句
}

if单选择.png

package com.hongcheng.struct;

import java.util.Scanner;

public class If1 {
    public static void main(String[] args) {

        //选择结构
        //if单选择结构
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入内容:");
        String s = scanner.nextLine();

        //equals:判断字符串是否相等
        if (s.equals("hello")) {
            System.out.println(s);
        }
        System.out.println("End");

        scanner.close();
    }
}

if双选择结构 if-else

现在我们公司需要做一款游戏,如果做出来了,我们晚上出去庆功,但如果失败了,那我们就去把别人公司的游戏收购了。hahaha!

这时候我们就需要一个双选择结构 if else,一个单if选择结构已经不能满足我们的需求了。

  • 语法
if (判断条件) {
    // 如果条件为true
} else {
    // 如果条件为false
}

if双选择结构if else.png

package com.hongcheng.struct;

import java.util.Scanner;

public class If2 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        // if双选择结构 if else
        // 现在我们公司需要做一款游戏,如果做出来了,我们晚上出去庆功,
        // 但如果失败了,那我们就去把别人公司的游戏收购了。hahaha!

        System.out.println("游戏开发是否成功?1表示成功;2表示失败");

        int k = scanner.nextInt();

        if (k == 1) {
            System.out.println("成功,晚上出去庆功!");
        } else {
            System.out.println("只能用钱去收购TX了!哈哈哈");
        }

        scanner.close();
    }
}

if多选择结构 if-else if-else

有时候我们不只要收购TX一个公司,可能还要收购暴雪的游戏,也许还有阿里巴巴。

  • 语法
if (判断条件1) {
    // 如果条件1为true
} else if (判断条件2) {
    // 如果条件2为true
} else if (判断条件3) {
    // 如果条件3为true
} else {
    // 如果条件3为false
}

if多选择结构if else if.png

package com.hongcheng.struct;

import java.util.Scanner;

public class If3 {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        // if多选择结构 if else if else
        /*
        if语句最多有1个 else语句,else语句在最后
        if语句可以有多个 else if 语句,他们必须在 else语句之前
        一旦其中一个 else if语句为真,其他的 else if和 else语句都会跳过
         */
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();

        if (score == 100) {
            System.out.println("恭喜满分");
        } else if (score < 100 && score >= 90) {
            System.out.println("A级");
        } else if (score < 90 && score >= 80) {
            System.out.println("B级");
        } else if (score < 80 && score >= 70) {
            System.out.println("C级");
        } else if (score < 70 && score >= 60) {
            System.out.println("D级");
        } else if (score < 60 && score >= 0) {
            System.out.println("不及格");
        } else {
            System.out.println("成绩不合法");
        }

        scanner.close();
    }
}

嵌套的if结构

  • 可以使用嵌套的if...else 语句,有个 if else语句里面可以再嵌套多个if else。

  • 语法

if (判断条件1) {
    //如果条件1为true
    if (判断条件2) {
        //如果条件2为true
    }
}

switch多选择结构

多选择结构也可以使用 switch语句实现。

  • switch case语句判断一个变量和一些值中的某个值是否相等,每个值叫做一个分支。

  • switch语句的变量类型可以是:byte、short、int、char

  • 从JDK7开始,switch可以用字符串String类型作为变量类型

  • case标签必须是字符串常量或字面量

语法格式:

switch (expression) {
    case value:
        //语句
        break;	//可选,但最好使用
    case value:
        //语句
        break;
    default:
        //语句
}
package com.hongcheng.struct;

public class Switch1 {

    public static void main(String[] args) {

        //case穿透    //switch的本质是匹配一个值
        char grade = 'C';

        switch (grade) {
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("挂科");
                break;
            default:
                System.out.println("非法数据");
        }

    }
}

反编译

从.class字节码反编译回.java文件,通过IDEA可以实现这种操作。

  • 具体步骤
  1. 找到字节码输出文件夹
  2. 把字节码文件复制到.java文件夹
  3. 使用IDEA打开工程目录下的字节码文件即可

通过比较对象的hashCode来匹配标签,hashCode可以认为是唯一的。

反编译.png

package com.hongcheng.struct;

public class Switch2 {

    public static void main(String[] args) {

        String name = "布鲁斯韦恩";

        /*
        JDK7的新特性,可以用String类型作为 switch变量类型
        字符的本质还是数字
         */
        //反编译   (编译)java--->class(字节码文件)--->java(反编译IDEA)

        switch (name) {
            case "迪丽热巴":
                System.out.println("迪丽热巴");
                break;
            case "古力娜扎":
                System.out.println("古力娜扎");
                break;
            case "布鲁斯韦恩":
                System.out.println("布鲁斯韦恩");
                break;
            default:
                System.out.println("杨超越");
        }

    }
}

while循环

while循环是最基本的循环,它的结构是:

while (conditon) {
    //循环语句
}
  • 只要判断条件为true,循环就会一直进行下去。
  • 我们一般情况是想让循环停下来,所以需要一个让判断条件失效的情况结束循环。
  • 只有少部分情况才需要循环一直执行,比如服务器监听客户端请求等......
  • 判断条件一直为true会无限循环,也叫死循环,我们编程的时候应该尽量避免写死循环,死循环会影响程序性能或造成程序崩溃。
package com.hongcheng.struct;

public class While1 {

    public static void main(String[] args) {
        //输出1~100
        int i = 0;

        while (i < 100) {
            i++;
            System.out.println(i);
        }

        //死循环
        while (true) {
            //等待客户端连接
            //......
        }
    }
    
}

计算1+2+3+...+100=?如下:

package com.hongcheng.struct;

public class While2 {

    public static void main(String[] args) {
        // 计算1+2+3+...+100=?

        int i = 0;
        int sum = 0;

        while (i < 100) {
            i++;
            sum += i;
        }
        System.out.println(sum);
    }

}

do while循环

  • while循环中,如果判断条件为false,那么循环体不会执行。有时我们需要先执行再判断,do while循环保证至少执行一次。

do while语法:

do {
    //循环语句
} while (判断条件);
  • while和 do while的区别
    • while是先判断后执行,do while是先执行后判断。
    • do while保证循环体最少执行一次,while有可能一次都不执行。
package com.hongcheng.struct;

public class DoWhile {

    public static void main(String[] args) {
        int a = 0;

        while (a < 0) { //循环体一次都不执行
            System.out.println(a);
            a++;
        }

        System.out.println("===============");

        do {            ////循环体至少执行一次
            System.out.println(a);
            a++;
        } while (a < 0);
    }

}

for循环

for循环是一种可以迭代的循环结构,是最有效、最灵活的循环结构。

  • for循环执行的次数在开始前就确定。

for循环语法:

for (初始化; 判断条件; 更新) {
    //循环语句
}

for循环执行流程

  1. 先执行初始化条件,初始化条件可以声明一个或多个变量,也可以为空。
  2. 然后执行判断条件,如果为true就执行循环体,如果为false就跳过循环体执行后面的语句,判断条件也可以为空,即是true。
  3. 执行一次循环后更新迭代部分。
  4. 然后判断条件,循环上面的2,3步骤。
package com.hongcheng.struct;

public class For1 {

    public static void main(String[] args) {
        int i = 1;  //初始化条件

        while (i <= 100) {  //条件判断
            System.out.println(i);  //循环体
            i += 2; //迭代
        }
        System.out.println("while循环结束");

        //初始化条件、判断条件、迭代
        for (int a = 1; a <= 100; a++) {
            System.out.println(a);
        }
        System.out.println("for循环结束");
    }

}

增强for循环

  • 增强for循环是 JDK5的新特性,主要用在数组和集合的遍历元素。

forEach语法:

for (变量类型 变量名 : 数组名) {
    //循环语句
}
package com.hongcheng.struct;

public class ForEach {
    public static void main(String[] args) {

        int[] numbers = {10, 20, 30, 40, 50};   //静态初始化一个数组

        //普通for循环,遍历数组
        for (int a = 0; a < numbers.length; a++) {
            System.out.println(numbers[a]);
        }

        System.out.println("==============");

        //增强for循环,遍历数组
        for (int i : numbers) {
            System.out.println(i);
        }
    }
}

break和continue

  • break可以用在任何循环和switch中,break的作用是强制退出循环,不再执行循环的剩余语句,转而执行循环后的语句。

  • continue只能用在循环中,continue的作用是中止本次循环,回到判断条件看是否继续循环。

package com.hongcheng.struct;

public class Break {
    public static void main(String[] args) {
        int i = 0;

        while (i < 100) {
            i++;
            System.out.println(i);
            if (i == 40) {
                break;      //退出循环,执行循环后的语句
            }
        }
        System.out.println("最后的i是:" + i);
    }
}
package com.hongcheng.struct;

public class Continue {
    public static void main(String[] args) {
        int i = 0;

        while (i < 100) {
            i++;
            if (i % 10 == 0) {
                System.out.println();
                continue;       //中止这次循环,回到开头重新判断条件
            }

            System.out.print(i + " ");
        }
    }
}

goto

goto在Java中不使用,但是有。goto相当于书签的作用,可以跳转到标记的地方。带标签的break和continue跟goto很像。

标签的格式:

mark:
这篇关于Java流程控制的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!