Java流程控制*
用户交互Scanner、Scanner进阶使用
用户交互Scanner
之前我们学习的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。java.util.Scanner 是java5的新特征, 我们可以通过Scanner类来获取用户的输入
基本语法:
Scanner s = new Scanner(System.in);
//有些代码大家可能不理解,比如这个new,大家目前先不用理解代码的意思,先学会跟着操作,之后我们讲面向对象的时候你就会逐一明白这些代码每一个具体的意思
通过 Scanner 类的 next() 与 nextLine() 方法获取输入的字符串,在读取前我们一般需要使用 hasNext() 与 hasNexLine() 来判断是否还有输入的数据。
下面我们来实践一下加深理解和记忆
使用next方式读取:
package com.xiaodi.operator.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args){
//创建一个扫描器对象 用于接收键盘数据
//使用IDEA开发工具输入Scanner之后回车,它就会自动导入这个类import java.util.Scanner;
//我们之前一直用的是System.out是输出;System.in是输入
//这里引用了Scanner数据类型
//通过new Scanner(System.in);接收用户的输入,并且把它封装成了scanner对象
Scanner scanner = new Scanner(System.in);
//输出一行字
System.out.println("使用next()方法接收:");
//判断用户有没有输入字符串
//if语句还没学,if就是如果的意思
//如果scanner这个对象有没有用户输入,(==true不写就是默认上节课讲过,一般新手才会加)有的话就使用执行里面的语句
if (scanner.hasNext()){
//使用next方式接收用,并封装给数据类型为String的str变量
String str = scanner.next();
//输出用户输入的内容
System.out.println("输入的内容为:"+str);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关
scanner.close();
}
}
我们运行起来之后,他会显示使用next方式读取,然后等待你输入字符串,我输入hello world返回输入的内容为:hello;然后程序结束
String str = scanner.next();这句代码执行完程序会等待用户输入完毕,如果你没去输入数据那么程序就会一直卡在那
但是有没有发现我们输入的hello world它只输出了一个hello
刚才我们使用的是next(),现在我们使用nextLine()试一下:
package com.xiaodi.operator.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine()方法读取:");
if (scanner.hasNext()) {
//使用nextLine()方式读取,并封装给数据类型为String的str变量
String str = scanner.nextLine();
System.out.println("输入的内容为:"+str);
}
scanner.close();
}
}
这次输入hello world,返回的也是hello world
那我们来看一下 next()和nextLine()两种接收用户输入到底有上面区别
next():
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效符之前遇到的空白,next()方法会自动去掉
例如我输入: hello;则返回:hello
- 只有输入有效字符后才将其后面输入的空白作为分隔符或结束符
- next() 不能读取带有空格的字符串
nextLine():
- 以Enter为结束符,也就说 nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空白
我们还没有学习到if上面的代码看起来会比较复杂,我下面写一个不用if语句和判断用户输入方法的的代码,让大家 自己分析,我就不写注释了
package com.xiaodi.operator.scanner;
import java.util.Scanner;
public class Demo03 {
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();
}
}
以上内容请务必掌握!!!
Scanner进阶使用
万一我们需要用户输入指定类型的数据,那该怎么判断用户输入的是否是我们指令类型的数据
我们在IDEA定义好scanner对象后;输入scanner.后会跳出很多方法出来
比如scanner.hasNextInt() :这样就是判断是否输入的是Int类型;这样我们就能配合if…else…语句来使用;if…else…就是如果就否则就的意思。
读取数据的方法也要变成scanner.nextInt()
下面我们来演示一下
package com.xiaodi.operator.scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i = 0;
float f = 0.0F;
//提示用户输入
System.out.println("请输入数据:");
//使用hasNextInt()方法判读用户输入的数据是否为Int类型
if (scanner.hasNextInt()) {
//使用nextInt()方法读取Int数据,并赋值给i(这里因为i我们上面已经定义了所以不用在指定类型)
i = scanner.nextInt();
System.out.println("输入的数据为:"+i);
}else {
System.out.println("请输入整数类型的数据!");
String a = scanner.nextLine();
}
//提示用户输入
System.out.println("请输入数据:");
//使用hasNextFloat()方法判读用户输入的数据是否为Float类型
if (scanner.hasNextFloat()) {
//使用nextFloat()方法读取float数据,并赋值给f(这里因为f我们上面已经定义了所以不用在指定类型)
f = scanner.nextFloat();
System.out.println("输入的数据为:"+f);
}else {
System.out.println("请输入小数类型的数据!");
}
scanner.close();
}
}
运行的结果为:
第一种情况:
请输入数据:
1
输入的数据为:1
请输入数据:
1.2
输入的数据为:1.2
第二种情况
请输入数据:
xiaodi
请输入整数类型的数据!
请输入数据:
xiaodi
请输入小数类型的数据!
有没有发现我在第一个if…else…语句中的else中加了一行代码
String a = scanner.nextLine();
你不加这行代码的话,你运行起来,你第一个数据输入错误了,它会直接将第一个数据拿到第二次做判断,导致你第二次不能输入数据。(但是有的地方会有需要这种情况,但是我们这里测试的话就不用了)
案例:
我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入输入非数字来结束输入并输出执行结果
package com.xiaodi.operator.scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//和,有可能会输入小数,所以使用double类型
double sum = 0.0;
//个数,因为最后要求平均值,平均值就是和除以个数
int m = 0;
//使用while循,判断是否输入数字,如果是就一直循环获取用户输入,如果不是则退出循环
while (scanner.hasNextDouble()) {
//获取用户输入,并赋值给i
double i = scanner.nextDouble();
//把和加上获取的输入
sum = sum + i;
//个数加1
m = m + 1;//m++
System.out.println("您输入了第"+m+"个数据当前的总和为:"+sum);
}
//输出总和和平均数
System.out.println("您输入的数据的总和为:"+sum);
System.out.println("您输入的数据的平均数为:"+(sum / m));
scanner.close();
}
}
运行结果:
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单选择结构
我们很多时候需要去 判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
语法:
if (布尔表达式) {
//如果布尔表达式为true将执行的语句,如果为false则跳过if语句
}
演示:
package com.xiaodi.operator.struct;
import java.util.Scanner;
public class Demo01 {
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则 执行if语句结果如下:
请输入内容:
Hello
Hello
End
第二次输入XiaoDi则 跳过if语句结果如下:
请输入内容:
XiaoDi
End
if双选择结构
那现在有一个需求,学校要一个输入分数来判定学生成绩是否及格的程序,>=60分为及格,
Original: https://www.cnblogs.com/xiaodi-CISP-PTE/p/15977626.html
Author: XiaoDi_CISP-PTE
Title: 五、Java控制流程
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/580988/
转载文章受原作者版权保护。转载请注明原作者出处!