java控制流程目录
- 用户交互Scanner(扫描)
- 顺序结构
- 选择结构
- 循环结构
- break 和 continue(继续)
- 练习
scanner对象
java.util.Scanner 用来获取用户输入
Scanner s = new Scanner(System.in);
通过Scanner的类的next()和nextLine()方法获取输入的字符串,在读取前我们一般需要用hasNext()和hasNextLine()判断是否还有输入的数据。
思维流程:
- 创建基本输出类
- 用Scanner类实例化一个对象scanner(变量)
- new开启Scanner的系统输入(System.in)
- 接受获取到的系统输入赋值给对象scanner
- 判断是否有输入
- 关闭new开启的系统输入scanner
next() :
- 以检测到字符串开始跑流程到结束,没检测到字符串不运行流程,并一直保持运行。
- 过滤输入字符串前的空格,过滤字符串中含有空格后面的字符串(除了开头空格,后面检测到空格就结束对后面的输出)
package com.ckw.blog.Scanner;
import java.util.Scanner;
public class demo01next {
public static void main(String[] args) {
//实例一个Scanner类的变量用来存储数据系统输入的数据,开启系统输入
Scanner scanner =new Scanner(System.in);
System.out.println("请输入数据!");
//判断是否有输入数据
if (scanner.hasNext()){
//如果有输入,则把输入的数据赋值给str字符串变量
String str = scanner.next();
System.out.println("你刚才输入了:"+str);
};
//开启后必须对应关闭,不然会浪费系统资源。
scanner.close();
}
}
扩展:
package com.ckw.blog.Scanner;
import java.util.Scanner;
//看看除了scanner之外能不能变其他变量的实验
public class demo_test {
public static void main(String[] args) {
//实例一个Scanner类的对象jj,用于给开启的系统输入赋值
Scanner jj =new Scanner(System.in);
//接收到系统输入后,用next()方法把接受到的数据赋值给变量bb
String bb = jj.next();
System.out.println(bb);
}
}
nextLine():
- 以回车键开始运行到结束
- 输出所有输入的字符串,包括空格
package com.ckw.blog.Scanner;
import java.util.Scanner;
public class demo02_nextLine {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
if(input.hasNext()){
String response = input.nextLine();
System.out.println("您刚刚输入的是:"+response);
};
input.close();
}
}
判断是否输入
hasnext():
检测是否接收了字符串,返回 布尔类型
hasnextLine():
检测是否接受了回车键,返回 布尔类型
用hasnext的方法,用选择语句强制用户必须输入后才可以退出。
package com.ckw.blog.Scanner;
import java.util.Scanner;
public class demo02_nextLine {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("如果你不输入有效字符,我就一直运行下去");
if(input.hasNext()){
System.out.println("我收到你的输入,现在开始赋值输出");
String response = input.nextLine();
System.out.println("您刚刚输入的是:"+response);
};
input.close();
}
}
方法区别
next() 跟nextLine()的区别
- next输入有效字符后面的空格会自动作为结束符,例如hello,world,只会输出hello。而nextLine可以输出全部
- nextLine读到回车键后结束,next一定要读到有效字符才结束。
练习
package com.ckw.blog.Scanner;
import java.util.Scanner;
public class demo02_text {
public static void main(String[] args) {
Scanner input =new Scanner(System.in);
if(input.hasNext()){
String res = input.nextLine();
System.out.println(res);
};
input.close();
}
}
易错点
总是忘记了关闭扫描。
解决方式一般启动Scanner的语句写完,就写Scanner关闭的语句。然后就在中间写需要的语句就可以了
练习02
一个简易的收银系统。
包含所学
- 包机制,引用包
- Scanner包 获取系统输入跟判断输入的值
- while循环机制
- 8种数据类型byte short char int long double float boolean
- 数据类型转换
package com.ckw.blog.Scanner;
import java.util.Scanner;
public class demo03_test {
//做一个收银系统,统计下多少个顾客,卖了多少金额,平均顾客的消费水平
//1.创建一个方法
public static void main(String[] args) {
//2.定义变量,人数,消费金额
int people =1;
int peoples =0;
float money = 0f;
//3.启动系统输入
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextFloat()){
peoples=people++;
money = scanner.nextFloat()+money;
System.out.println("当前结账人数为"+peoples+",结账总金额为"+money);
};
System.out.println("今天总结账人数为"+peoples+"人,总营收金额为"+money+"元,人均消费水平为"+(int)(money/peoples)+"元");
scanner.close();
//用完输入记得关闭,减少系统资源占用。习惯
}
}
编辑中出现的bug部分。
- 自增++需要是b=a++,不能使a=a++.这样不会自增。
- 自增++正确方式是a++;就可以了,不需要其他的赋值。
- 算总和的时候,忘了把输入跟原来的金额相加
- 字符串需要核对好再进行运算,不然字符串经常写错字