Java学习笔记——流程控制
Java学习笔记——流程控制
Day05
一、用户交互Scanner
1.Scanner对象
- 我们通过Java工具包java.util.Scanner中的Scanner类来获取用户的输入
- 基本语法:
Scanner s = new Scanner(System.in);
- 通过Scanner类的next()与nextLine()方法获取输入的字符串
- 通过Scanner类的hasNext()与hasNextLine()判断是否还有输入的数据
2.Scanner用法及代码实现
2.1next方式
public static void main(String[] args) {//创建一个扫描器对象,用于接收键盘数据Scanner scanner = new Scanner(System.in);System.out.println("使用next方式接收:");//判断用户有没有输入字符串if (scanner.hasNext()){//使用next方式接收String str = scanner.next();//程序会等待用户输入完毕System.out.println("输出的内容为:"+str);}//凡是属于IO流的类如果不关闭会一直占用资源,要养成良好习惯用完就关掉scanner.close();}
2.2nextLine方式
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();}
Scanner scanner = new Scanner(System.in);
固定式开头
scanner.close;
固定式结尾
3.next()方法
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
public static void main(String[] args) {//从键盘接收数据Scanner scanner = new Scanner(System.in);System.out.println("请输入数据:");String str = scanner.next();System.out.println("输出的内容为:"+str);scanner.close();
}
4.nextLine()方法
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空白
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();
}
5.Scanner进阶使用
5.1hasNextLine结合Int、Float型数据
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();
}
5.2案例:求平均数(输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果)
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();
}
二、顺序结构
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");System.out.println("hello6");
}
从上而下,一句一句执行,除非特别指明
三、选择结构
3.1if单选择结构
语法:if(布尔表达式) {
//如果布尔表达式为true将执行的语句
}
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();
}
当满足条件时,输出以下内容
当不满足条件时,直接跳出语句,输出End!
3.2if双选择结构
语法:if(布尔表达式) {
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
public static void main(String[] args) {//考试分数大于60就是及格,小于60分就不及格Scanner scanner = new Scanner(System.in);System.out.println("请输入成绩:");if (scanner.hasNextDouble()) {double score = scanner.nextDouble();if (score>60) {System.out.println("及格");}else {System.out.println("不及格");}}scanner.close();
}
3.3if多选择结构
语法:if(布尔表达式1) {
//如果布尔表达式1的值为true执行代码
}else if(布尔表达式2){
//如果布尔表达式2的值为true执行代码
}else if(布尔表达式3){
//如果布尔表达式3的值为true执行代码
}else if(布尔表达式4){
//如果布尔表达式4的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的成绩:");int score = scanner.nextInt();if (score<60) {System.out.println("不及格!");} else if (score<70) {System.out.println("及格");}else if (score<80) {System.out.println("中等");}else if (score<90) {System.out.println("良好");}else if (score<=100) {System.out.println("优秀");}scanner.close();
}
优化以上代码,使程序更加严谨!!!
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();
}
if语句注意事项:
if语句至多有一个else语句,else语句在所有的else if语句之后,
if语句可以有若干个else if语句,它们必须在else语句之前。
一旦其中一个else if语句检测为true,其他的else if语句以及else语句都将跳过执行
3.4嵌套的if结构
语法:if(布尔表达式 1) {
//如果布尔表达式1的值为true将执行代码
if(布尔表达式 2) {
//如果布尔表达式2的值为true将执行代码
}
}
代码实例见3.2
3.5switch多选择结构
switch case语句判断一个变量与一系列中某个值是否相等,每个值称为一个分支。
语法:switch(expression) {
case value :
//语句
break;//可选
case value :
//语句
break;//可选
//你可以有任意数量的case语句
default ://可选
//语句
}
- switch 语句中的变量类型可以是:
- byte、short、int或者char。
- 从Java SE 7开始
- switch支持字符串String类型了
- 同时case标签必须为字符串常量或字面量
3.5.1一般型变量类型
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//case穿透 //switch 匹配一个具体的值char grade = 'C';switch (grade) {case 'A' :System.out.println("优秀");break;//可选case 'B' :System.out.println("良好");case 'C' :System.out.println("及格");case 'D' :System.out.println("再接再厉");case 'E' :System.out.println("挂科");default:System.out.println("未知等级");}scanner.close();
}
若grade=A,运行结果如下
若grade=B,运行结果如下
若grade=E,运行结果如下
若grade=除case以外的任意字符,运行结果如下
在case ‘D’后加入break,代码为
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//case穿透 //switch 匹配一个具体的值char grade = 'A';switch (grade) {case 'A' :System.out.println("优秀");break;//可选case 'B' :System.out.println("良好");case 'C' :System.out.println("及格");case 'D' :System.out.println("再接再厉");break;case 'E' :System.out.println("挂科");default:System.out.println("未知等级");}scanner.close();
}
若grade=A,运行结果如下
若grade=B,运行结果如下
若grade=C,运行结果如下
若grade=D,运行结果如下
若grade=E,运行结果如下
若grade=除case以外的任意字符,运行结果如下
由上述两种代码及其执行结果可见:
- case语句具有穿透性
- 若有一个case语句下没有放置break语句,则会继续把下面其他case语句的输出的内容执行出来;反正,仅输出完自己部分语句即可离开switch case语句
将上述两种代码优化后即可得出最优代码(如下所示)
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);//case穿透 //switch 匹配一个具体的值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 'E' :System.out.println("挂科");break;//可选default:System.out.println("未知等级");}scanner.close();
}
3.5.2String型字符串
public static void main(String[] args) {String name = "康庄大道";//JDK7的新特性,表达式结果可以式字符串!!!//字符的本质还是数字//反编译 java---class(字节码文件)---反编译(IDEA)switch (name) {case "雷厉风行":System.out.println("雷厉风行");break;case "康庄大道":System.out.println("康庄大道");break;default:System.out.println("好运来!");}
}
当name=康庄大道时,程序输出:
当name=雷厉风行时,程序输出:
当name=任意字符时,程序输出:
四、循环结构
4.1while循环
语法:while(布尔表达式) {
//循环内容
}
- 只要布尔表达式为true,循环就会一直执行下去。
- 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
- 循环条件一直为true就会造成无线循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者程序卡死崩溃!
public static void main(String[] args) {//计算1+2+……+100=?int i = 0;int sum = 0;while (i<=100) {sum = i+sum;i = i + 1;}System.out.println(sum);System.out.println(i);}
}
4.2do…while循环
语法:do{
//代码语句
}while(布尔表达式)
public static void main(String[] args) {int i = 0;int sum = 0;do {sum = sum + i;i++;}while (i<=100);System.out.println(sum);System.out.println(i);
}
- do…whlie循环至少会执行一次
4.3While与do…While的区别
while先判断后执行。dowhile是先执行后判断
Do…while总是保证循环体会被至少执行一次!
4.4For循环
语法:for(初始化;布尔表达式;更新) {
//代码内容
}
- for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
- for循环的执行次数在执行前就已经确定
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循环结束!");
}
- 关于for循环有以下几点说明:
- 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式的值。如果是true,循环体被执行。如果是false,循环终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
- 再次检测布尔表达式,循环执行上面的过程。
4.4.1练习1:计算0到100之间奇数和偶数的和
public static void main(String[] args) {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);}
4.4.2练习2:用while或for循环输出1~1000之间能被5整除的数,并且每行输出3个
public static void main(String[] args) {for (int i = 0; i < 1000; i++) {if (i%5==0) {System.out.print(i+"\t");}if (i%(5*3)==0) { //换行System.out.println();// System.out.print("\n");}}//println 输出完会换行//print 输出完不会换行int i = 1;while (i < 1000) {if (i%5==0) {System.out.print(i+"\t");if (i%15==0) {System.out.println();//System.out.print("\n");}}i++;}
}
for循环:
…………
while循环:
…………
4.4.3练习3:打印九九乘法表
/* 1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
*/
public class ForDemo05 {public static void main(String[] args) {//九九乘法表for (int j = 1; j <= 9; j++) {for (int i = 1; i <= j; i++) {System.out.print(j + "*" + i + "=" + (j*i) + "\t");}System.out.println();}}
}
步骤分析:
1.我们先打印第一列
2.我们把固定的1再用一个循环包起来
3.去掉重复项,i<=j
4.调整样式 tab+换行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7S4Fn2fy-1642670789542)(C:\Users\86155\AppData\Roaming\Typora\typora-user-images\image-20220119214741029.png)]
4.5增强For循环
- JDK5引入了一种主要用于数组和集合的增强型for循环
语法:for(声明语句:表达式) {
//代码句子
}
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
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 x:numbers) {System.out.println(x);}
}
4.6break、continue
- break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中的剩余的语句。(break语句也在switch语句中使用)
- continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
break代码实例:
public static void main(String[] args) {int i = 0;while (i<100) {i++;System.out.print(i+"\t");if (i==30) {break;}}System.out.println();System.out.println("123");}
continue代码实例:
public static void main(String[] args) {int i =0;while (i<100) {i++;if (i%10==0) {System.out.println();continue;}System.out.print(i+" ");}
}
五、流程控制练习
public static void main(String[] args) {//打印三角形 5行for (int i = 1; i <= 5; i++) {for (int j = 5; j >=i ; j--) {System.out.print(" ");}for (int j = 1; j <=i ; j++) {System.out.print("*");}for (int j = 1; j <i ; j++) {System.out.print("*");}System.out.println();}}
分步解释:
第一步:输出空格(因为空格无法显示出来,所以用”*“表示)
public static void main(String[] args) {//打印三角形 5行for (int i = 1; i <= 5; i++) {for (int j = 5; j >=i ; j--) {System.out.print(" ");}System.out.println();}}
第二步:构造三角形的左半部分
public static void main(String[] args) {//打印三角形 5行for (int i = 1; i <= 5; i++) {for (int j = 5; j >=i ; j--) {System.out.print(" ");}for (int j = 1; j <=i ; j++) {System.out.print("*");}System.out.println();}
}
第三步:构造三角形的右半部分
public static void main(String[] args) {//打印三角形 5行for (int i = 1; i <= 5; i++) {for (int j = 5; j >=i ; j--) {System.out.print(" ");}for (int j = 1; j <=i ; j++) {System.out.print("*");}for (int j = 1; j <i ; j++) {System.out.print("*");}System.out.println();}}
网课学习推荐:狂神说Java
网站自学推荐:菜鸟教程|Java教程
Java学习笔记——流程控制相关推荐
- java学习之流程控制
编写代码如下: package 第1章.java概要;public class _4_流程控制 {//if-elsepublic static void testIfElse(int num){Sys ...
- Java学习:流程控制
程序在执行过程中需要执行的路径,我们需要控制. 8.1 流程控制分类 顺序流程 程序进入之后,依次逐行执行里面的代码.顺序结构是整个程序执行的主干. 分支流程 在程序执行的过程中,有可能针对于某种情况 ...
- Python学习笔记——流程控制(拉勾教育数据分析实战训练营学习笔记)
流程控制 1 程序结构 顺序结构 按编写顺序依次执行 选择结构 根据条件选择的结果,选择执行不同的语句 循环结构 在一定条件下,反复执行某段程序 2 选择语句 2.1 if语句 语法规则 ...
- JAVASE学习笔记 流程控制中判断与选择练习题
1.从键盘上输入一个分数,如果60分(含)以上,就打印合格,如果在60分以下,就打印不合格 package test.disanzhang; //导包,注意导包的位置在class的上面 import ...
- java学习笔记2(datawhale教程):运算符和表达式、流程控制、数组
java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 文章目录 java学习笔记2(datawhale教程):运算符和表达式.流程控制.数组 一.运算符和表达式 1.数学函数与 ...
- java学习笔记13--反射机制与动态代理
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...
- java学习笔记5--类的方法
接着前面的学习: java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址 ...
- 尚学堂Java学习笔记
尚学堂Java学习笔记 ============================ J2SDK&JRE J2SDK:JAVA2 SOFTWARE DEVELOPMENT KIT JRE:JAVA ...
- 郑志远的java学习笔记
郑志远的java学习笔记 郑志远 CCB 1 Java起源 略 2 Java语言概述 1.面向对象编程的3个原则:封装(encapsulation).继承(inh ...
最新文章
- 研究表明:无人驾驶技术减少拥堵加快进程
- 集合框架之三种迭代的能否删除
- 【必看】运维是“越老越吃香“的职业?
- Eclipse文档注释快捷键以及自定义文档注释内容
- 中国六个漂亮的古镇风景名胜区网站欣赏
- java运行环境简称_Java程序的运行环境简称之为
- 口碑网发布2010吃住玩消费风向指数
- C# 加载C++的dll
- js解释器rhino查看执行环境
- 关于电脑的基础单词笔记
- 基于类和对象的高精度算法封装
- 电脑亮度多少对眼睛好_电脑显示器亮度多少合适呢??
- [leetcode]139. 单词拆分
- 教你如何拒绝带病毒的恶意网页陷阱
- 我所理解的Remoting (2) :远程对象的生命周期管理[下篇]
- 关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路
- 【线性代数】向量组的线性相关性公式定理速查
- 在线HTTP POST/GET接口测试工具
- 2022年全球与中国对位芳纶和间位芳纶行业产销需求与投资预测分析报告
- 以太网没有有效的ip怎么解决
热门文章
- 第8章第17节:制作企业宣传册的公司团队第四页面 [PowerPoint精美幻灯片实战教程]
- podman基础教程
- 创新的时机 – 黄金点游戏
- Hey.com:如果你没有观点,你就不值得关注
- 45个超实用网站,超强整理!外贸人收藏
- Oracle 19c 安装步骤(超详细)
- 设计模式8之中介者模式
- 禁用Ubuntu 16.04.4 LTS 图形登陆界面只能选择guest账号登陆
- 全新笔记本电脑荣耀MagicBook 14 整合优化搭配软件协同属实好用
- [JS] checkbox 选中/全选/反选/不选