之前我们学习的基本语法中我们并没有实现程序和人的交互,但是java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.scanner 是java5的新特征,我们可以通过scanner类来获取用户的输入
基本语法:
scanner s = new scanner(system.in);
//有些代码大家可能不理解,比如这个new,大家目前先不用理解代码的意思,先学会跟着操作,之后我们讲面向对象的时候你就会逐一明白这些代码每一个具体的意思
通过 scanner 类的next()与nextline()方法获取输入的字符串,在读取前我们一般需要使用hasnext()与hasnexline()来判断是否还有输入的数据。
下面我们来实践一下加深理解和记忆
使用next方式读取:
我们运行起来之后,他会显示使用next方式读取,然后等待你输入字符串,我输入hello world返回输入的内容为:hello;然后程序结束
string str = scanner.next();这句代码执行完程序会等待用户输入完毕,如果你没去输入数据那么程序就会一直卡在那
但是有没有发现我们输入的hello world它只输出了一个hello
刚才我们使用的是next(),现在我们使用nextline()试一下:
这次输入hello world,返回的也是hello world
那我们来看一下next()和nextline()两种接收用户输入到底有上面区别
next():
一定要读取到有效字符后才可以结束输入。对输入有效符之前遇到的空白,next()方法会自动去掉 例如我输入: hello;则返回:hello
只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
next() 不能读取带有空格的字符串
nextline():
以enter为结束符,也就说 nextline()方法返回的是输入回车之前的所有字符可以获得空白我们还没有学习到if上面的代码看起来会比较复杂,我下面写一个不用if语句和判断用户输入方法的的代码,让大家自己分析,我就不写注释了
以上内容请务必掌握!!!
万一我们需要用户输入指定类型的数据,那该怎么判断用户输入的是否是我们指令类型的数据
我们在idea定义好scanner对象后;输入scanner.后会跳出很多方法出来
比如scanner.hasnextint() :这样就是判断是否输入的是int类型;这样我们就能配合if…el…语句来使用;if…el…就是如果就否则就的意思。
读取数据的方法也要变成scanner.nextint()
下面我们来演示一下
运行的结果为:
第一种情况:
请输入数据:
1
输入的数据为:1
请输入数据:
1.2
输入的数据为:1节水灌溉论文.2
第二种情况
请输入数据:
xiaodi
请输入整数类型的数据!
请输入数据:
xiaodi
请输入小数类型的数据!
有没有发现我在第一个if…el…语句中的el中加了一行代码
string a = scanner.nextline();
你不加这行代码的话,你运行起来,你第一个数据输入错误了,它会直接将第一个数据拿到第二次做判断,导致你第二次不能输入数据。(
案例:
我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入输入非数字来结束输入并输出执行结果
运行结果:
10.5
您输入了第1个数据当前的总和为:10.5
19.5
您输入了第2个数据当前的总和为:30.0
30
您输入了第3个数据当前的总和为:60.0
40
您输入了第4个数据当前的总和为:100.0
x
您输入的数据的总和为:100.0
您输入的数据的平均数为:25.0
其中while循环还不懂没关系,你先跟着我的代码写一遍,等一下学到你再回来看一下,你就会恍然大悟,原来是这个样子的!
java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
顺序结构是最简单的算法结构
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是又若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
if单选择结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
语法:
演示:
第一次输入hello则执行if语句结果如下:
请输入内容:
hello
hello
end
第二次输入xiaodi则跳过if语句结果如下:
请输入内容:
xiaodi
end
if双选择结构
那现在有一个需求,学校要一个输入分数来判定学生成绩是否及格的程序,>=60分为及格,<60分为不及格。这样的需求用一个if就搞不定了,我们需要有两个判断,需要一个双选择结构,所以就要使用if-el结构
语法:
演示:
第一个同学考了10分(走了el的分支)结果如下:
请输入你的分数:
10
不及格
第二个同学考了90分(走了if的分支)结果如下:
请输入你的分数:
90
及格
if多选择结构
我们发现刚才的代码不符合实际情况,真实的情况还可能存在sabcd,存在区间多级判断。比如90-100就是s,80-90就是b..等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!
语法:
演示:
太多分支,可以自己执行看看!我这里就不演示执行结果了!会使文章看起来怪怪的
嵌套的if结构
使用嵌套的if…el语句是合法的。也就是你可以在另一个if或 el if语句中使用if或el if语句,你可以像if语句一样嵌套el if…el
语法:
有时候我们在解决一些问题的时候,可以缩小操作范围,它可以通过层级来判断,提高效率
比如我们现在有一个需求:要查找1-100之间这样的一个数字,这样的话是比较麻烦的;
我们最笨的方法就是将用户输入的数字去1-100之间一个一个的对比,但是万一他输入了100,那程序就要对比到100才能成功,这样就会花费更多的资源和时间;我们就可以用if嵌套来判断,把这个100分成1-50,50-100去判断用户输入的值在哪个里面,或者分成更多份去判断;
我们生活在这个大数据时代,我们应该不断去思考如何提高我们程序的效率,或许哪一天你就想出来了能够提高效率的算法那你将在程序的历史上留下一些痕迹了!
记住一点:我们流程控制语句都可以相互嵌套而互不影响
多选择结构还有一个实现方法就是switch ca语句。
switch ca 语句判断一个台风的影响变量与一系列值中某个值是否相等,每个值称为一个分支
语法:
switch语句中的变量类型可以是:
byte、short、int或char
从java 7开始,switch支持string类型了
同时ca标签必须在为字符串常量或字面量
演示:
当grade为c时运行如下:
及格
再接再厉
挂科
当grade为a时运行如下:
优秀
为什么会这样,我说过这个break是可选的,如果不写break他就会执行匹配到的分支以及后面的分支直到遇到break,如果没遇到,就会直接执行到最后;这种现象叫做ca穿透;(所以要养成一个好习惯,写完每一个ca后面都应该加一个break(除非特殊需求))
我们还可以来一个default云计算导论
当grade不等于任何一个ca的时候就会执行default分支;
跟if比起来switch是有一些好处的,它在执行ca语句的时候会先匹配,匹配成功就会返回当前ca的值,然后再根据它是否有break判断是否继续输出。if是判断匹配区间,而swi堆雪人tch是匹配一个具体的值!
接下来演示jdl7开始才支持的字符串类型:
运行结果为:晓迪
还记不记得我之前讲过字符的本质还是数字,给大家讲一个东西反编译
什么叫反编译:比如.java文件编译成.class文件,这个class文件叫做字节码文件是人类看不懂的,我们要看懂就要进行反编译
反编译教程:
使用idea,点开享目结构(file–>project structure),就能看到compiler output,将地址复制到文件管理器,打开找对对应需要反编译的文件,你可以使用notepad++打开看一下,你会发现看不懂,没事我也看不懂。
在idea文件夹那边右键,选择open ln,再选择explorer打开对应文件夹,把class文件复制进去,在idea双击这个字节码文件,选择accept,这个就是反编译之后的
你会发现 switch (name) {} 变成了 switch(name.hashcode()) {} ; ca “晓迪” : 变成了 ca 848887: ,也就是说它进行编译之后是通过hashcode()进行判断的,什么是hashcode(),你现在可以理解为每一个对象都有一个hashcode,它是通过一些特定算法生成的,而我们ca后面的字符串中文都会有一个自己对应的hash值,然后它就判断这个hash值是否跟name的hash值相同,这就是jdk7新特性的原理
while是最基本的循环,她的结构为:
只要布尔表达式为 true ,循环就会一直执行下去。我们大多数情况会让循环停止下来,我们需要一个让表达式失效的方式来结束循环少部分情况需要循环一直执行,比如服务器的请求响应监听等循环条件一直为true就会造成无限循环【死循环】,我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死崩溃!演示输出1-100:
运行会输出1-100
演示死循环:
运行会无限输出1 直到程序崩溃
演示:计算1+2+3+…+100=?
结果5050
其中while循环还能像下面这样写自己思考一下有什么不同
语法:
同样是1+2+3…+100,看看dowhile是怎么实现的吧!
while和do-while的区别:
while先判断后执行。dowhile是先执行后判断!do…while总是保证循环体会被至少执行一次!这是他们的主要差别。演示:两者区别
输出结果为:
===========
0
虽然所有的循环结构都可以用while或者do…while表示,但java提供了另一种语句 for循环,使一些循环结构变得更加简单
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
在idea直接输入100.for然后回车能快捷生成
for循环执行的次数是在执行前就确定的。语法格式如下:
实例:
for的死循环
练习1:计算0-100之间的基数和偶数的和;
练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个
第一种方法:
第二种方法:
这些练习不一定要用我写的方法才能实现,大家也可以多思考,主要思路肯定是循环
至于我为什么这题要写两种方法呢?
第一种使用的是i++每次只+1,需要循环1000次,第二种使用的是直接+5,只需循环200次即可,如果遇到非常大的数据时可以减少%75的资源,这是一件很好的事情哈 我们可以在不影响程序正常工作的条件下,减少程序运行所需资源
练习3:打印99乘法表
这道题主要学习思路,学会把一个大问题拆分成若干个小问题,逐一攻破!,这也是我们以后开发项目的一个基本思路!
语法:
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域限定在循环语句块,其值与此时数组元素的值相等
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
演示:
分析:把numbers这个数组每一项遍历出来,赋值给int x,每次循环x就从numbers中取值
我们用普通for循环演示一下 上面的操作,上面使用的增量型for循环就是用来小学数学课程标准简化下面的操作,核心原理是一样的,大家简单理解一下
现在能理解当然是最好的了,不理解也没关系,我们现在只是让大家知道一下我们以后会学一个这样简化的东西!不理解不必深究!
演示:
break只是跳出循环,程序还会继续执行。
continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。演示:
通过上面的演示,break可以理解为,我不;continue可以理解为,我不第二天又怂了又回来继续干
打印5行的三角形
解题思维:
我们把三角形切一下,然后分部完成
第一步打印1
第二部打印2,然后把第一步打印的内容变为空格
第三步打印第三部分
如果不理解使用idea中的debug
在你不理解的行开始打上断点,就是在行号后面点一下,然后点击小虫子图标,然后程序运行到断点会停住,然后通过↓这个符号一步一步的去运行下去,去一步一步理解!点击console能看见当前输出的结果
到此这篇关于java控制流程的文章就介绍到这了,更多相关java控制流程内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-06 02:05:22,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/87353f37fed1b220f2666cb72892e43f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Java控制流程示例代码详解.doc
本文 PDF 下载地址:Java控制流程示例代码详解.pdf
留言与评论(共有 0 条评论) |