2022-10-11 10:58:41

前言

本文开始流程控制方面的学习,主要包括用户交互和流程控制语句,适合新手学习。


1 用户交互Scanner

1.1 Scanner对象

Java提供了一个可以获取用户输入的Scanner工具类

基本语法:

Scanner s = new Scanner(System.in);

通过Scanner类的next()nextLine()方法获取输入的字符串,读取之前使用hasNext()hasNextLine()判断是否还有输入的数据。

next()nextLine()方法代码示例:

public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:"); //判断用户有没有输入字符串
if (scanner.hasNext()==true){
//使用next方式接收
String str = scanner.next();
System.out.println("输出的内容为:"+str);
}
//凡是属于IO流的类,如果不关闭会一直占用资源,要养成良好习惯,用完就关
scanner.close(); }
}

结果:

使用next方式接收:
hello world
输出的内容为:hello

【注意】:无法输出空格之后的数据

  • 一定要读取到有效字符后才可以结束输入
  • 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
  • 只有输入有效字符才将其后面输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串

hasNext()hasNextLine()方法代码示例:

public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:"); //判断是否还有输入
if (scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("输出的内容为"+str);
} scanner.close();
}
}

结果:

使用nextLine方式接收:
hello world
输出的内容为hello world
  • 以enter为结束符
  • 可以获取空格

hasNextInt()hasNextFloat() 方法示例:

import java.util.Scanner;

public class Demo03 {
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();
}
}

结果:

请输入整数:
10
整数数据:10
请输入小数:
0.6
小数数据:0.6

1.2 Scanner进阶

【练习题】:输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

import java.util.Scanner;

public class Demo01 {
public static void main(String[] args) {
//输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
Scanner scanner = new Scanner((System.in)); //从键盘接收数据
double sum = 0;
//计算输入了多少个数字
int m = 0; System.out.println("请输入数据:"); //通过循环判断是否还有输入,并在里面对每一次进行求和和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m = m + 1; //m++
sum = sum + x;
System.out.println("你输入了第"+m+"个数据,当前结果sum="+sum);
} System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均数为" + (sum / m)); scanner.close();
}
}

结果:

请输入数据:
10
你输入了第1个数据,当前结果sum=10.0
22
你输入了第2个数据,当前结果sum=32.0 222
你输入了第3个数据,当前结果sum=254.0
X
3个数的和为254.0
3个数的平均数为84.66666666666667

【注意】对msum需要在全局上指定数据类型和初值,不能只在while局部里面赋初值,否则程序在输出时候会报错。


2 顺序结构

语句与语句之间,框与框之间是按从上到下的顺序进行的,由若干个依次执行的处理步骤组成的,是任何一个算法都离不开的一种基本算法结构。


3 选择结构

3.1 if但选择结构

判断一个事情是否可行,然后才去执行,这样一个过程在程序中用if语句来表示。

语法:

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

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();
}
}

结果:

请输入内容:
Hello
Hello
END

3.2 if双选择结构

当单if结构无法满足需求的时候,就行需要双选择if-else结构。

语法:

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

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();
}
}

结果:

请输入成绩:
60
及格

3.3 if多选择结构

当出现的选项不止两个时,需要一个多选择结构来处理这类问题。

语法:

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

import java.util.Scanner;

public class IfDemo01 {
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>=0){
System.out.println("不及格");
}else {
System.out.println("成绩错误");
} scanner.close();
}
}

结果:

请输入成绩:
100
恭喜满分

3.4 嵌套的if结构

可以在if或者else if语句中嵌套使用if或者else if语句。

语法:

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

3.5 switch多选择结构

多选择结构也可以用switch case语句实现。switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

switch语句的变量类型】

  • byte、short、int、char
  • 从Java SE 7开始
  • switch支持字符串String类型
  • case标签必须为字符串常量或者字面量

语法:

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

示例代码:

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

结果:

及格

【注意】

  • 存在case穿透
  • 不加break就会输出全部结果

4 循环结构

4.1 while循环

语法:

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

【注意】

  • 只要布尔表达式为true,循环就回一直执行下去
  • 需要一个表达式失效的方式结束循环
  • 少部分情况需要循环一直执行
  • 循环条件一直为true会造成无限循环,应该避免这种情况,容易造成程序崩溃

【练习】计算1+2+3+...+100=?

public class WhileDemo01 {
public static void main(String[] args) {
int i = 1;
int sum = 0;
while (i<=100){
sum = sum + i;
i++;
}
System.out.println(sum);
}
}

结果:

5050

4.2 do while循环

对于while语句而言,如果不满足条件,则不能进入循环。当需要即使不满足条件,也至少执行一次。do while循环会至少执行一次。

语法:

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

【while和do while的区别】

  • while先判断后执行,do while是先执行后判断
  • do while总是保证循环至少被执行一次
public class DoWhileDemo01 {
public static void main(String[] args) {
int i = 0;
int sum = 0; do {
sum = sum + i;
i++;
}while (i<=100); System.out.println(sum);
}
}

结果:

5050

4.3 for循环

for循环可以让程序变得更简单。

public class ForDemo01 {
public static void main(String[] args) {
int a = 0; //初始化条件
while (a<=100){ //条件判断
System.out.println(a); //循环体
a+=10; //迭代条件
}
System.out.println("while循环结束"); for (int i=0;i<=100;i+=10){
System.out.println(i);
} System.out.println("for循环结束");
}
}

结果:

0
10
20
30
40
50
60
70
80
90
100
while循环结束
0
10
20
30
40
50
60
70
80
90
100
for循环结束

【练习】

① 计算0到100之间的奇数和偶数的和。

public class ForDemo02 {
public static void main(String[] args) {
//计算0到100之间的奇数和偶数的和
int oddsum = 0;
int evensum = 0;
for(int i = 0;i <= 100;i+=1){
if (i%2!=0){
oddsum += i;
}else{
evensum += i;
}
}
System.out.println("奇数的和:"+oddsum);
System.out.println("偶数的和:"+evensum);
}
}

结果:

奇数的和:2500
偶数的和:2550

② 用while或for循环输出1-1000之间能被5整除的数,并且每行输出8个。

public class Test01 {
public static void main(String[] args) {
//用while或for循环输出1-1000之间能被5整除的数,并且每行输出8个。
int i = 1;
while (i <= 1000){ double a = i % 5;
if (a == 0){
if (i % 8 == 0){
System.out.println(i+" ");
}else{
System.out.print(i+" ");
}
}
i++;
}
}
}

结果:

5 10 15 20 25 30 35 40
45 50 55 60 65 70 75 80
85 90 95 100 105 110 115 120
125 130 135 140 145 150 155 160
165 170 175 180 185 190 195 200
205 210 215 220 225 230 235 240
245 250 255 260 265 270 275 280
285 290 295 300 305 310 315 320
325 330 335 340 345 350 355 360
365 370 375 380 385 390 395 400
405 410 415 420 425 430 435 440
445 450 455 460 465 470 475 480
485 490 495 500 505 510 515 520
525 530 535 540 545 550 555 560
565 570 575 580 585 590 595 600
605 610 615 620 625 630 635 640
645 650 655 660 665 670 675 680
685 690 695 700 705 710 715 720
725 730 735 740 745 750 755 760
765 770 775 780 785 790 795 800
805 810 815 820 825 830 835 840
845 850 855 860 865 870 875 880
885 890 895 900 905 910 915 920
925 930 935 940 945 950 955 960
965 970 975 980 985 990 995 1000

③ 打印九九乘法表

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

结果:

 1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

4.4 增强for循环

主要用于数组或集合。

语法:

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

【注意】

  • 声明新的局部变量,该变量的类型必须和数组元素的类型匹配;
  • 表达式是要访问的数组名,或者是返回值为数组的方法。
public class ForDemo03 {
public static void main(String[] args) {
int[] num = {10,20,30,40,50}; //定义一个数组 for (int i = 0;i<5;i++){
System.out.println(num[i]);
}
System.out.println("=================="); //遍历数组的元素
for (int x:num){
System.out.println(x);
}
}
}

结果:

10
20
30
40
50
==================
10
20
30
40
50

5 break和continue语句

【break】

在任何循环语句的主体部分,均可用break控制循环的流程,可以强行退出循环。

【continue】

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

【goto】

带标签的breakcontinue


本章节学习结束,接下来再接再厉,加油!!!

Java学习之路:流程控制的更多相关文章

  1. 【原】Java学习笔记005 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...

  2. lishell学习之路:流程控制(case)

    流程控制case语句: 介绍:多分支case条件语句 1.case语句和if..elif..else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而i ...

  3. Java学习笔记五——流程控制

    分支结构 Java提供了两种常见的分支控制结构:if语句和switch语句. if语句 if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式: 第一种形式: if (5 > ...

  4. 【原】Java学习笔记007 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // for循环 // ...

  5. 【原】Java学习笔记006 - 流程控制

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:写一万次&q ...

  6. Java学习day4 程序流程控制一

    一.分支结构 条件语句:if...else if语句: 一个 if 语句包含一个布尔表达式和一条或多条语句,如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代 ...

  7. shell学习之路:流程控制(while)

    while循环: 介绍:while循环是不定循环,也称作条件循环.只要条件判断成立,循环就会一直继续执行,直到条件判断不成立,循环才会停止,这就是和for的固定循环不太一样了. while [ 条件判 ...

  8. shell学习之路:流程控制(for)

    for循环的语法: 1.  for 变量 in 值1 值2 值3.... do 程序 done 例如:下列脚本会分别打印4次 分别是morning noon afternoon evening的值 # ...

  9. shell学习之路:流程控制(if)

    1.单分支if条件语句 if [ 条件判断式 ];then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 注意事项: 1.if语句使用fi结尾,和一般语言使用大括号结尾不同 2.[ ...

  10. java学习之路之javaSE基础2

    java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...

随机推荐

  1. WPF主窗体调用 User32的SetWindowPos 设置窗体置顶会导致与其他窗体抢夺焦点的问题

    最近发现:自己开发的窗体应用,在二级弹窗或者提示框弹出的时候,交替点击窗体和窗体外(相当于窗体交替的获取焦点和失去焦点),都会导致其他的应用一闪一闪的. 经过排查,是由于该窗体由于部分因素考虑,用了  ...

  2. RAID磁盘阵列技术

    RAID磁盘阵列技术 1.RAID概述 RAID(Redundant Array of Independent Disk),从字面意思讲的是基于独立磁盘的具有冗余的磁盘阵列,其核心思想是将多块独立磁盘 ...

  3. Vite + TS 项目导入 jQuery 包时报错:Could not find a declaration file

    TypeScript 需要类型标注,当使用第三方库(除 ts 以外写的库,即 js)时,又缺少声明文件,我们需要引用它的声明文件,才能获得对应的代码补全.接口提示等功能.jQuery 不是 TypeS ...

  4. Dart 异步编程(三):详细认识

    基本概念 普通任务按照顺序执行:异步任务将在未来的某个时间执行. 实际演示 void main() { // waitFuture 函数是一个异步函数,阻塞会发生在函数内部 waitFuture(); ...

  5. Word修订内容批量标红

    最近改文章,期刊要求提供所有修改内容都标红的修订稿,本着能不手改就不手改的原则,我尝试检索了一下自动修改的方法,最先找到的是简书上的一篇使用VB宏命令批量修改的文章 (Word-接受全部修订为标红字体 ...

  6. C#基础_C#判断文件是否被打开

    1.用文件流判断 using System; using System.Collections.Generic; using System.IO; using System.Linq; using S ...

  7. 【java】学习路线5-public和private、构造方法、this关键字、封装对象、static关键字、main方法结构解析

    //一个教务管理系统//知识点清单/*public & private 的区别一个是公开的,一个是私有的,作用域不一样,访问的权限不一样咯如果是用private修饰,则调用者只可以是在当前的作 ...

  8. KingbaseESV8R6不同隔离级下xmin的区别

    背景 sys_stat_activity视图中用两个字段表示: backend_xid表示事务开始需要申请的事务id backend_xmin表示一个事务快照,表示当前数据库中最小的正在运行的事务号, ...

  9. python自动化测试系列教程

    随着互联网产品更新迭代加快,Web 开发和测试的需求也越来越大.很难想象,如果阿里的双 11.京东的 618,这些庞大繁杂的系统,由工程师们一个个手动测试,将会是一个怎样费时费力.成本巨大的工程. 也 ...

  10. IO_对象流

    对象流 对象的本质是用来组织和存储数据的,对象本身也是数据.那么,能不能将对象存储到硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和反序列化实现. java对象的序列化和 ...