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. Thymeleaf是什么?该如何使用。

    先了解Thymeleaf是什么 1. Thymeleaf 简介 Thymeleaf 是新⼀代 Java 模板引擎,与 Velocity.FreeMarker 等传统 Java 模板引擎不同,Thyme ...

  2. Nginx 目录结构、Nginx服务控制命令

    # Nginx目录结构 # 首先推荐一个查看目录结构的工具 tree # yum install -y tree # sudo apt-get install -y tree ubuntu # 查看n ...

  3. 游戏开发常遇到数据一致性BUG,怎么解?

    摘要:数据副本强一致.全节点可写.存储全面降本,GaussDB(for Redis)重新定义游戏数据库,彻底修复一致性BUG. 本文分享自华为云社区<华为云GaussDB(for Redis)揭 ...

  4. 机器学习建模高级用法!构建企业级AI建模流水线 ⛵

    作者:韩信子@ShowMeAI 机器学习实战系列: http://www.showmeai.tech/tutorials/41 本文地址:http://www.showmeai.tech/articl ...

  5. 【ARK UI】HarmonyOS ETS 资源管理基本使用

    ​代码实现 api讲解 getStringArray getStringArray(resId: number, callback: AsyncCallback<Array>): void ...

  6. 未来的可再生能源电网!FREEDM 论文阅读

    全文主旨[省时间快读] 背景: 论文标题:The Future Renewable Electric Energy Delivery and Management (FREEDM) System: T ...

  7. 《HelloGitHub》第 77 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  8. OSI模型 TCP/IP协议

    常见术语 网络相关的术语 1.拓扑:物理拓扑-----体现了设备之间的连接关系 逻辑拓扑----设备之间的通信关系 2.数据载荷:传递的实际信息 3.报文(PDU--协议数据单元) 4.数据头部的作用 ...

  9. Job And Schedule (V8R6C4)

    KingbaseES 数据库提供了 kdb_schedule 扩展,使得用户能通过类似oracle job 的方式进行job调用.kdb_schedule 提供了三个Schema :dbms_job ...

  10. LibTorch | 使用神经网络求解一维稳态对流扩散方程

    0. 写在前面 本文将使用基于LibTorch(PyTorch C++接口)的神经网络求解器,对一维稳态对流扩散方程进行求解.研究问题参考自教科书\(^{[1]}\)示例 8.3. 目录 0. 写在前 ...