Java04流程控制:用户交互Scanner、条件结构、顺序结构、循环结构

1.用户交互Scanner

1.1 Scanner对象

  1. 前面的基本语法中没有实现人和程序的交互,但是Java提供了一个工具类,可以用来获取用户的输入。java.util.Scanner 是Java5 的新特征,可以通过Scanner类获取用户的输入信息。

  2. 基本语法:

Scanner scan = new Scanner(System.in);
  1. 通过Scanner 类的next() 和 nextLine() 方法获取输入的字符串,在读取前需要使用 hasNext() 和 hasNextLine() 判断是否还有输入的数据。

1.2 使用 next() 方法获取数据

next()方法的特点:

  1. 一定要读取到有效字符后才可以结束输入;
  2. 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉;
  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符;
  4. next()不会得到带有空格的字符串。
import java.util.Scanner;
/**
 * 用户交互Scanner——next()
 * 1.创建扫描器对象,用于接收对象;
 * 2.判断用户是否有输入连续字符串,不包括空格。
 */
public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的名字:");
		//判断是否输入
        if (scanner.hasNext()) {
            System.out.println("用next()获取的名字是:"+ scanner.next());
        } else {
            System.out.println("你还没有输入内容");
        }
        //关闭scanner
        scanner.close();
    }
}

1.3 使用 nextLine() 方法获取数据

nextLine()方法的特点:

  1. 以 Enter 为结束符——在回车键之前的所有字符都会输出;
  2. 可以获得空白;
import java.util.Scanner;
/**
 * 用户交互Scanner——nextLine()
 * 1.创建扫描器对象,用于接收对象;
 * 2.判断用户是否有输入字符串,可以有空格。
 */
public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你的名字:");
        //判断是否输入
        if (scanner.hasNextLine()) {
            System.out.println("用nextLine()获取的名字是:"+ scanner.nextLine());
        } else {
            System.out.println("你还没有输入内容");
        }
        //关闭扫描器
        scanner.close();
    }
}

1.4 Scanner进阶:nextInt()、nextFloat()

获取int型数据:hasNextInt();
获取float型数据:hasNextFloat();

import java.util.Scanner;
public class Demo03ScannerPro {
    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();
    }
}

1.5 代码实现:计算平均值

使用场景1:
已知员工的总人数和他们各自的业绩,计算他们的平均业绩

import java.util.Scanner;
public class Demo04ScannerPro {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double num ;//个人业绩
        double sum = 0.0;//总业绩
        int peopleNum ;//员工人数
        double svg ;//平均值

        System.out.println("请输入共有多少员工需要计算?");

        if (scanner.hasNextInt()) {
            peopleNum = scanner.nextInt();
            System.out.println("共有"+ peopleNum +"位员工");
            System.out.println("请输入第1位员工业绩");
            if (scanner.hasNextDouble()) {
                for (int i = 0; i < peopleNum; i++) {
                    num = scanner.nextDouble();
                    sum += num;

                    if (i+1 < peopleNum) {
                        System.out.println("第"+(i+2)+"位员工的业绩是:");
                    }
                }
            }
            svg = sum / peopleNum;
            System.out.println(peopleNum+"位员工的平均业绩是:"+svg);
        } else {
            System.out.println("你输入内容非法");
        }

        scanner.close();
    }
}

使用场景2:
已知有不固定人数的身高数据,求出他们的平均值。
要求:每输入一个数据回车确认,通过非数字结束输入并输出结果。

package com.c.procress;

import java.util.Scanner;

public class Demo05ScannerPro {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double sum = 0.0;//身高总计
        int i = 0;//人数总计
        System.out.println("请输入第"+ (i+1) +"个人的身高");

        while (scanner.hasNextDouble()) {
            double high = scanner.nextDouble();
            i ++;
            sum +=high;
            System.out.println((i)+"个人的身高总计是:"+ sum);
            System.out.println("请输入第"+ (i+1) +"个人的身高");
        }
        System.out.println("共输入"+i+"个人的数据,");
        System.out.println("他们的平均身高是:"+(sum / i));

        scanner.close();
    }
}

2.顺序结构

  1. Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行;
  2. 顺序结构是最简单的算法结构;
  3. 语句与语句之间,框架与框架之间是按照从上到下的顺序进香的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
package com.d.struct;

public class Demo01SequentialStructure {
    public static void main(String[] args) {
        System.out.println("hello1");
        System.out.println("hello2");
        System.out.println("hello3");
        System.out.println("hello4");
        System.out.println("hello5");
    }
}

3.选择结构:if、switch

  1. if 单选择结构;
  2. if 双选择结构;
  3. if 多选择结构;
  4. 嵌套的if结构;
  5. switch多选择结构。

3.1 if 选择结构

1)if语句用于判断一个东西是否可行,一般用来判断连续的区间

3.1.1 if单选择语法结构

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

3.1.2 if双选择语法结构

if( 布尔表达式1(阈值)) {
	// 如果布尔表达式为true,将执行的语句;
} else {
	// 如果布尔表达式为false,将执行的语句;
}

3.1.3 if多选择语法结构

if( 布尔表达式1(阈值)) {
	// 如果布尔表达式1为true,将执行的语句;
}else if( 布尔表达式2(阈值)) {
	// 如果布尔表达式2为true,将执行的语句;
}else if( 布尔表达式3(阈值)) {
	// 如果布尔表达式3为true,将执行的语句;
}else {
	// 如果以上布尔表达式为false,将执行的语句;
}

3.1.4 嵌套if语法结构:

if( 布尔表达式1(阈值)) {
	// 如果布尔表达式1为true,将执行的语句;
	if( 布尔表达式2(阈值)) {
		// 如果布尔表达式2为true,将执行的语句;
	} else {
		// 如果布尔表达式2为false,将执行的语句;
	}
} else {
	// 如果布尔表达式1为false,将执行的语句;
}

3.1.5 if选择结构代码演示:

import java.util.Scanner;
public class Demo02SelStru {
    Scanner scanner = new Scanner(System.in);
    public String score() {
        String inf = null;
        double score = scanner.nextDouble();
        
        if (score >=0 && score <=100) {
            if (score == 100) {
                inf = "恭喜你,你的成绩是:A+";
            } else if (score >=80 && score <100) {
                inf = "恭喜你,你的成绩是:A";
            }else if (score >=60 && score <80) {
                inf = "恭喜你,你的成绩是:B";
            }else {
                inf = "你的成绩是:C ,继续加油";
            }
        }else {
            inf = "你输入的成绩不合法,请重新输入";
        }

        scanner.close();
        return inf;
    }
    public static void main(String[] args) {
        System.out.println("请输入你的分数");
        Demo02SelStru struScore = new Demo02SelStru();
        String score = struScore.score();
        System.out.println(score);
    }
}

3.2.switch 多选择结构

1)switch-case语句也可以实现多选择结构;
2)switch-case语句多用于判断一个变量和一系列之中的某个值是否相等,每个值称为一个分支;
3)switch语句中的变量类型可以是:
(1)byte、short、int、、char;
(2)从javaSE 7开始支持字符串(String)类型;
(3)同时case标签必须是字符串常量 或字面量。
4)switch-case语法结构:

switch (expression){
    case value1:
    	//语句1;
        break;//可选,但有穿透现象
    case value2:
    	//语句2;
        break;//可选,但有穿透现象
    default:
        //默认语句3;
}

5)switch 代码演示:

public class Demo04SwiCase {
    public static void main(String[] args) {
        System.out.println("请输入数字:");
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();

        switch (str){
            case "100":
                System.out.println("你输入的是:100");
                break;//可选,但有穿透现象
            case "0":
                System.out.println("你输入的是:0");
                break;//可选
            default:
                System.out.println("你输入的不是 100或者0");
        }
        scanner.close();
    }
}

3.3.if 和 switch 结构的区别

if 和 switch 结构的主要区别:

  1. if语句常用于判断区间取值范围
  2. switch语句常用于判断确定值

4.循环结构:while、do-while、for

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

4.1 while循环

1)while是最基本的循环,只要布尔表达式为true,循环就会一直运行下去;
2)通常情况下需要一个表达式来结束循环;但有例外,如:服务器的请求响应监听等;
3)循环条件一直为true就会造成无限循环【死循环】,要避免死循环造成的程序性能低下 或者程序卡死崩溃。
4)while循环语句结构:

while( 布尔表达式 ) {
	// 循环内容;
}
public class Demo05While {
    public static void main(String[] args) {
        int i = 0;
        int sum = 0;//总和
        // 输出 1~100
        while (i <100) {
            i++;
            sum +=i;
            System.out.println("i="+i);
            System.out.println("sum="+sum);
        }
    }
}

4.2 do-while循环

1)do…while循环和while相似,不同的是do…while至少循环一次,因为它是先循环后判断;
2)do…while循环语句结构:

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

3)do-while代码演示:

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

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

4.3 while、do…while循环的区别:

1)while先判断后执行,do-while是先执行后判断;
2)do-while总是保证循环体会被至少会被执行一次,这是他们主要区别。
3)代码演示 while、do…while的区别:

public class Demo07Distinguish {
    public static void main(String[] args) {
        System.out.println("==while、do-while=的区别:==");
        //初始化条件
        int i = 0;
		
		//条件判断
        while (i <0) {
            System.out.println("while_i1 = "+i);// 循环体
            i ++;// 迭代
            System.out.println("while_i2 = "+i);
        }

        System.out.println("--------do-while-------");
        do {
            System.out.println("do_i1 = "+i);// 结果:do_i1 = 0
            i++;
            System.out.println("do_i2 = "+i);// 结果:do_i2 = 1
        } while (i <0);
    }
}

4.4 普通for循环

Java 5 中引入了一种主要用于数组的增强型for循环

1)for循环使得循环结构变得更加简单;
2)for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
3)for循环执行的次数在执行前就确定的;
4) for循环的执行顺序说明:
(1)首先,执行初始化步骤,可以声明一种类型但可以初始化一个或多个循环控制变量,也可以是空语句;
(2)然后,检测布尔的值。如果为true,执行循环体;若为false,执行终止,并跳到第(5)步;
(3)执行一次循环后,更新控制变量(迭代因子控制循环变量的增减)
(4)跳到第(2步)
(5)跳出循环执行后面的语句;

5)for循环语法格式:

for (初始化条件; 布尔表达式; 更新迭代) {
	// 代码语句(循环体)
}

6)for代码演示:

public class Demo08For {
    public static void main(String[] args) {
        int sum = 0;
        
        //初始化条件、条件判断、迭代
        for (int i = 0; i < 101; i++) {
            sum += i;
            System.out.println("i="+i);
            System.out.println("sum="+sum);
        }
    }
}

7)简单应用_1:计算 0~100之间的奇数和与偶数和。

public class Demo09ForPro1 {
    public static void main(String[] args) {
        int odd = 0;// 奇数和
        int even = 0;// 偶数和
        
        //初始化条件、条件判断、迭代
        for (int i = 0; i <= 100; i++) {
            //对 i进行取模运算
            if ((i%2) == 0) {
                even += i;
                System.out.println("偶数和" + even);
            } else {
                odd += i;
                System.out.println("奇数和" + odd);
            }
            System.out.println("---------i = " + i);
        }
    }
}

8)简单应用_2:用 while或 for循环输出1~1000之间能被5整除的数,并且每行输出 3个数。

public static void main(String[] args) {
        int num = 1;

        for (int i = 1; i <= 1000; i++) {
            //判断是否是5的倍数
            if ((i%5) == 0) { //对 i进行取模运算
                System.out.print(i+"\t");
                //判断每行有几位数
                if (num ==3) {
                    System.out.println();
                    num = 1;//当每行数有3位时重置
                } else {
                    num ++;
                }
            }
        }
    }

9)简单应用_3:打印九九乘法表

思路分析:

  1. 先打印第一列;
  2. 把固定的值(1),再用一个循环包裹起来;
  3. 去掉重复项;
  4. 调整样式。
public class Demo11ForPro3 {
    public static void main(String[] args) {
        // 行
        for (int i = 1; i <= 9; i++) {
            // 列
            for (int j = 1; j <= i; j++) {
                System.out.print(j+"*"+i+"="+(i*j)+"\t");
            }
            System.out.println("");
        }
    }
}

4.5 增强for循环

Java5引入了增强for循环,主要用于数组和集合;

1.)增强for循环语法格式,如下:

for( 声明语句 : 表达式) {
	// 循环体
}

2)声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等;
3)表达式:是要访问数组的组名,或者是返回数组的方法。

public class Demo12ForPP {
    public static void main(String[] args) {
        //定义一个数组
        int [] numbers = {112,110,119,114};

        //numbers.length:数组的长度
        for (int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }

        //遍历数组中的元素
        for (int x:numbers) {
            System.out.print(x +"\t");
        }
    }
}

5.break VS. continue、goto

5.1 break

1)适用范围:在任何循环语句的主体部分,均可用break控制循环的流程。
2)作用:break用于强行退出循环,不执行循环中剩余的语句;
3)break在switch循环语句中使用较多。

public class Demo13Break {
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            if (i== 30){
                break;
            }
            System.out.println(i);
        }
        System.out.println("循环结束!");
    }
}

5.2 continue

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

public class Demo14Continue {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            if (i== 8){
                continue;
            }
            System.out.println(i);
        }
        System.out.println("循环结束!");
    }
}

5.3 goto关键字(标签、锚点)

1)历史说明:goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中的到正式使用;
2)Java中没有goto,然而在break和continue这两个关键字上,仍可以看到一些goto的影子——带标签的break和continue;
3)“标签”:之后面跟一个冒号的标识符。例如,label:
4)Java中唯一用到标签的地方就是在循环语句之前。唯一原因:希望在其中嵌套另一个循环,由于break和Continue关键字通常只中断当前循环,若随同标签使用,他们就会中断到存在标签的地方。

package com.d.struct;
/**
 * @author bruce
 * @description (了解)标签:
 * 1.标签:用于结束当前循环,跳出循环到标签处
 * 2.场景:打印0~100之间所有的质数。
 * 3.质数:是指在大于 1的自然数中,除了 1和它本身以外
 * 不再有其他因数的自然数。
 */
public class Demo15Label {
    public static void main(String[] args) {
        //outer就是标签
        outer:for (int i = 2; i < 50; i++) {
            for (int j = 2; j <= i / 2; j++) {
                if (i % j ==0) {
                    // 条件成立就结束本次循环,跳到标签处
                    continue outer;
                }
            }
            System.out.print(i+"\t");
        }
    }
}

5.4 流程控制练习

打印三角形

public class Demo16Triangle {

    public static void main(String[] args) {
        for (int i = 0; i < 6; i++) {
            for (int j = 5; j > i; j--) {
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            for (int j = 0; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值