Java学习笔记-流程控制

流程控制

Java流程控制01:用户交互Scanner

tip:java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。

基本语法:

Scanner scanner = new Scanner(System.in);

通过Scanner类的next()与nextLine()方法获取输入的字符串,再读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的依据。

package com.maynerd.scanner;

import java.util.Scanner;

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

        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");

        //判断用户有没有输入字符串
        if(scanner.hasNext()){
//            String str = scanner.next();
            String str = scanner.nextLine();
            System.out.println("输出的内容为:" + str);
        }

        //凡是属于IO流的量需要把它关闭,避免占用资源
        scanner.close();
    }
}
package com.maynerd.scanner;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入数据:");

        String str = scanner.nextLine();
        System.out.println("输出的内容为:" + str);

        scanner.close();
    }
}

总结:主要讲了两种使用Scanner类的两种输入的用法。

Java流程控制02:Scanner进阶使用

tip:摁住ctrl点击大写的类Scanner进入类的源码查看。

使用scanner.hasNextInt()和scanner.hasNextFloat()的进阶用法,用来判断接收的数字,再用scanner.nextInt()和scanner.nextFloat()接收并输出,代码如下。

package com.maynerd.scanner;

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int i = 0;
        float f = 0.0f;
        System.out.println("请输入整数:");

        if(scanner.hasNextInt()){
            i = scanner.nextInt();
            System.out.println("整数数据" + i);
        }else{
            System.out.println("输入的不是整数数据");
        }

        System.out.println("请输入小数:");
        if(scanner.hasNextFloat()){
            f = scanner.nextFloat();
            System.out.println("小数数据" + f);
        }else{
            System.out.println("输入的不是小数数据");
        }

				scanner.close();
    }
}

输入多个数字,求他的总和和平均数,通过输入非数字结束输入并换行输出结果,代码如下。

package com.maynerd.scanner;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        //我们要输入多个数字,求他的总和和平均数,通过输入非数字结束输入并换行输出结果
        Scanner scanner = new Scanner(System.in);

        //和
        double sum = 0;
        //计算输入了多少个数字
        int m = 0;

        //通过while循环判断是否还有输入,并在里面对每一次进行求和统计
        while(scanner.hasNextDouble()){
            double x = scanner.nextDouble();
            m++;
            sum += x;
        }

        System.out.println(m + "个数的和为:" + sum);
        System.out.println(m + "个数的平均值为:" + (sum/m));

        scanner.close();
    }
}

Java流程控制03:顺序结构

  1. Java的基本结构就是顺序结构,除非特别指明,否则就是一句一句往下执行。
  2. 顺序结构是最简单的算法结构。
  3. 它是任何算法都离不开的一种结构。

Java流程控制04:if选择结构

if单选择结构、if双选择结构、if多选择结构、嵌套的if结构、switch多选择结构。

基本语法1:

if(布尔表达式){
			//如果布尔表达式为true将执行的语句
}

判断字符串是否为“Hello”,代码如下。

package com.maynerd.struct;

import java.util.Scanner;

public class IfDemo01 {
    public static void main(String[] args) {
        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();
    }
}

基本语法2:

if(布尔表达式){
			//如果布尔表达式的值为true
}else{
			//如果布尔表达式的值为false
}

判断考试分数,多于60就是及格,小于60就是不及格。

package com.maynerd.struct;

import java.util.Scanner;

public class IfDemo02 {
    public static void  main(String[] args) {
        //考试分数60就是及格,小于60分就不及格
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入数据:");
        int score = scanner.nextInt();

        if(score >= 60){
            System.out.println("及格");
        }else{
            System.out.println("不及格");
        }

        scanner.close();
    }
}

基本语法3:

if(布尔表达式1){
			//如果布尔表达式1的值为true
}else if(布尔表达式1){
			//如果布尔表达式2的值为true
}else if(布尔表达式2){
			//如果布尔表达式2的值为true
}else if(布尔表达式3){
			//如果布尔表达式3的值为true
}else{
			//如果以上表达式都不为true执行该代码
}

判断考试分数,并且分级,代码如下。

package com.maynerd.struct;

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        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 >= 50){
            System.out.println("不及格!");
        }else{
            System.out.println("成绩不合法!");
        }

        scanner.close();
    }
}

基本语法3:

if(布尔表达式1){
			//如果布尔表达式1的值为true执行代码
			if(布尔表达式 2){
						//如果布尔表达式2的值为true执行代码
			}
}

思考:用if的嵌套结构实现1~100查找某个数。

Java流程控制05:Switch选择结构

tip:switch语句的变量类型可以是:
byte、short、int或者char。
在Java7(Java SE 7)中引入新特性:判断的变量可以是String类型,同时case标签必须为字符串常量或字面量。

多选择结构还有一种实现方式就是switch case语句。

switch case 语句判断一个变量和一系列值中某个值是否相等,每个值称为一个分支。

基础语法:

switch(expression){
			case value :
					//语句
				break;//可选
			case value :
					//语句
				break;//可选
			//任意数量的case语句
		default ://可选
			//语句
}

代码如下:

package com.maynerd.struct;

public class SwitchDemo {
    public static void main(String[] args) {
        String name = "小白";
        switch(name){
            case "小红":
                System.out.println("小红");
                break;
            case "小白":
                System.out.println("小白");
                break;
            default:
                System.out.println("都不是!");
        }
    }
}

tip:反编译 java——class(字节码文件)——-反编译(IDEA),查看源码。

IDEA项目结构→项目→输出路径→文件资源管理器打开这个路径→项目输出位置找到production目录→在找到对应下级位置,找到对应.class结尾的文件,如图。

Untitled

右键用文本打开将会是乱码,所以我们是用IDEA反编译,用IDEA打开,把文件拷贝到打开的IDEA中.java所在目录中,即可查看。

Untitled

Java流程控制06:While循环详解

  1. while循环
  2. do-while循环
  3. for循环

基本语法:

while(布尔表达式){
			//循环内容
}

只要布尔表达式为true,循环就会一直执行下去。

我们大多数情况是会让循环停止下来的,我们需要一个让那个表达式失效的方式来结束循环。

少部分情况需要一直循环执行比如服务器的请求响应监听等。

循环条件一直未true会造成无限循环,我们正常业务中应该避免这种情况造成程序卡死崩溃。

思考:计算1加到100。

Java流程控制07:DoWhile循环

基本语法:

do{
		//代码语句
}while(布尔表达式);

while和dowhile的区别:

  1. while先判断后执行,dowhile是先执行后判断。
  2. dowhile总是会保证循环体会被至少执行一次!这是主要差别。

思考:用while和dowhile计算1加到100。

Java流程控制08:For循环详解

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

for循环执行的次数是在执行前就确定的。

tip:快捷键,输入100.for 回车自动生成一个for循环语句。

基本语法:

for(初始化;布尔表达式;更新){
			//代码语句
}
package com.maynerd.struct;

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

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

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

思考1:计算0-100之间所有奇数和偶数的和。

package com.maynerd.struct;

public class ForDemo02 {
    public static void main(String[] args) {
        //思考1:计算0-100之间的技术和偶数的和
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 0; i <= 100; i++) {
            if(i % 2 != 0){
                oddSum += i;
            }else{
                evenSum += i;
            }
        }

        System.out.println("奇数的和:" + oddSum);
        System.out.println("偶数的和:" + evenSum);
    }
}

思考2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个。

package com.maynerd.struct;

public class ForDemo03 {
    public static void main(String[] args) {
        //用while和for循环输出1-100之间呗5整除的数,并且每行输出3个。
        for (int i = 1; i <= 1000; i++) {
            if(i % 5 == 0){
                System.out.print(i + "\t");
            }
            if(i % 15 == 0){//每行
                System.out.println();
            }
        }
    }
}

Java流程控制09:打印九九乘法表

思考3:打印九九乘法表。

package com.maynerd.struct;

public class ForDemo05 {
    public static void main(String[] args) {
        //打印九九乘法表
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + (i*j) + "\t");
            }
            System.out.println();
        }
    }
}

Java流程控制10:增强For循环

tip:在Java5中引入一种主要用于数组或集合的增强for循环。

Main方法上面括号就是一个数组

基础语法:

for(声明语句 : 表达式){
			//代码句子
}

代码如下:

package com.maynerd.struct;

public class ForDemo06 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50};//定义了一个数组

        for (int i = 0; i < 5; i++) {
            System.out.println(numbers[i]);
        }
        System.out.println("========================");
        //遍历数组元素
        for (int number : numbers) {
            System.out.println(number);
        }
    }
}

Java流程控制11:break、continue、goto

brea在任何循环语句的主题部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break也可以在switch语句中使用)

continue语句用在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。

关于goto关键字:

goto关键字很早就在程序设计语言中出现。尽管goto是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子...带标签的break和continue。

“标签”是指后面跟一个冒号的标识符,例如:label;

对Java来说唯一用到标签的地方是在循环语句之前。而在循环语句之前设置的标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用他们,他们就会中断到存在标签的地方。

打印101-150之间所有的质数,代码如下。

package com.maynerd.struct;

public class LabelDemo {
    public static void main(String[] args) {
        //打印101-150之间所有的质数
        int count = 0;
        outer:for (int i = 101; i < 150; i++) {
            for (int j = 2; j < i/2; j++) {
                if(i % j == 0){
                    continue outer;
                }
            }
            System.out.print(i + "\t");
        }
    }
}

Java流程控制12:打印三角形及Debug

五行的三角形,代码如下。

package com.maynerd.struct;

public class ForDemo04 {
    public static void main(String[] args) {
        for (int i = 0; i < 5; i++) {
            for (int j = 5; j > i; j--) {
                System.out.print(" ");
            }
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            for (int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

Debug需要标记断点,再开启Debug模式,最后在console控制台一步一步往下执行,主窗口会标识每一行的变量值的变化。

posted @ 2022-02-24 08:53  Maynerd  阅读(52)  评论(0编辑  收藏  举报