Java学习之路:流程控制
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
【注意】对m和sum需要在全局上指定数据类型和初值,不能只在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】
带标签的break和continue。
本章节学习结束,接下来再接再厉,加油!!!
Java学习之路:流程控制的更多相关文章
- 【原】Java学习笔记005 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...
- lishell学习之路:流程控制(case)
流程控制case语句: 介绍:多分支case条件语句 1.case语句和if..elif..else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而i ...
- Java学习笔记五——流程控制
分支结构 Java提供了两种常见的分支控制结构:if语句和switch语句. if语句 if语句使用布尔值或布尔表达式(表达式结果为布尔值),if语句有3中形式: 第一种形式: if (5 > ...
- 【原】Java学习笔记007 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // for循环 // ...
- 【原】Java学习笔记006 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:写一万次&q ...
- Java学习day4 程序流程控制一
一.分支结构 条件语句:if...else if语句: 一个 if 语句包含一个布尔表达式和一条或多条语句,如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代 ...
- shell学习之路:流程控制(while)
while循环: 介绍:while循环是不定循环,也称作条件循环.只要条件判断成立,循环就会一直继续执行,直到条件判断不成立,循环才会停止,这就是和for的固定循环不太一样了. while [ 条件判 ...
- shell学习之路:流程控制(for)
for循环的语法: 1. for 变量 in 值1 值2 值3.... do 程序 done 例如:下列脚本会分别打印4次 分别是morning noon afternoon evening的值 # ...
- shell学习之路:流程控制(if)
1.单分支if条件语句 if [ 条件判断式 ];then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 注意事项: 1.if语句使用fi结尾,和一般语言使用大括号结尾不同 2.[ ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
随机推荐
- YII页面缓存
IndexController.php namespace frontend\controllers; use yii; use yii\web\Controller; class IndexCont ...
- 远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_181 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能 ...
- docker 安装gitlab
# docker 安装gitlab # 一.安装镜像(官网文档) export GITLAB_HOME=/srv/gitlab # 必须先设置它,它就是你存储代码仓库的位置.以后要移植的时候直接把这个 ...
- 5.6 NOI模拟
\(5.6\ NOI\)模拟 明天就母亲节了,给家里打了个电话(\(lj\ hsez\)断我电话的电,在宿舍打不了,只能用教练手机打了) 其实我不是很能看到自己的\(future,\)甚至看不到高三的 ...
- 羽夏看Linux内核——环境搭建
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...
- Python 懂车帝综合口碑数据
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! Python 懂车帝综合口碑数据 需求 ...
- Python-基础学习-第二轮
目录 数据类型 文件 自调用其他程序 os.system函数 os.startfile 函数 subprocess 模块 线程和进程 创建新线程 共享数据的访问控制 deamon线程 多线程 JSON ...
- 官宣!DolphinScheduler 毕业成为 Apache 软件基金会顶级项目
全球最大的开源软件基金会 Apache 软件基金会(以下简称 Apache)于北京时间 2021年4月9日在官方渠道宣布Apache DolphinScheduler 毕业成为Apache顶级项目.这 ...
- 大数据工作流任务调度--有向无环图(DAG)之拓扑排序
点击上方蓝字关注DolphinScheduler(海豚调度) |作者:代立冬 |编辑:闫利帅 回顾基础知识: 图的遍历 图的遍历是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点 ...
- C#基础_析构函数
C#析构函数 1. 析构函数的定义与注意的问题 析构函数用于释放被占用的系统资源. 析构函数的名字由符号"-"加类名组成. 使用析构函数时,应该注意下面的问题: ?只能在类中使用析 ...