Scanner对象
我们可以通过Scanner类获取用户的输入
next()方法和hasNext()方法的使用
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个Scanner对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
// 判断用户有没有输入字符串
if (scanner.hasNext()){
//用next方法来接收数据
String str=scanner.next();
//输出数据
System.out.println("输入的内容是:"+str);
}
//使用完关闭,如果一直不关闭会浪费资源
scanner.close();
}
}
注意 next()
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才会将其后面输入的空白作为分隔符或者结束符
- 输入有效字符后遇到空格会结束
- next()不能得到带有空格的字符串
nextLine()方法和hasNextLine()方法的使用
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//创建键盘录入对象scanner
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
//判断用户有没有输入
if (scanner.hasNextLine()){
//调用nextLine()方法来接收数据
String str = scanner.nextLine();
System.out.println("输入的内容是:"+str);
}
scanner.close();
}
}
注意 nextLine()
- 以Enter回车为结束符,nextLine()方法返回的是输入回车之前的所有字符
- 包括空格
Scanner中的数据类型
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);
}
System.out.println("请输入小数");
//判断输入的是不是小数
if (scanner.hasNextFloat()){
//接收数据
f = scanner.nextFloat();
//输出数据
System.out.println("输入的小数数据是:" +f);
}
scanner.close();
}
}
练习
输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
int m = 0;
System.out.println("请输入第"+(m+1)+"个数字:");
//通过循环判断是否还有输入,并在里面对每一次进行求和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m = m+1; //计算输入多少个数字,循环一次加1
sum = sum + x;
System.out.println("你输入了第"+m+"个数据,他们的和是:"+sum);
}
System.out.println(m + "个数的和为:"+sum);
System.out.println(m + "个数的平均数为:"+(sum/m));
scanner.close() ;
}
}
顺序结构
- java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
- 顺序结构是最简单的算法结构
- 语句与 语句之间,框与框之间 是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
选择结构
if单选择结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
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")){
//如果键盘录入的数据等于hello,就输出“匹配”
System.out.println("匹配");
}
System.out.println("程序结束");
}
}
if双选择结构
public class Demo02 {
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();
}
}
if多选择结构
- 我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断,比如90-100就是A,80-90就是B…等等,在生活中我们很多时候的选择也不仅仅只有两个,所以我们需要一个多选择器结构来处理这类问题
public class Demo03 {
public static void main(String[] args) {
//分数大于90小于100为A级,大于80小于90为B级,
//大于70小于80为C级,大于60小于70为dD级,小于60为不及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int score = scanner.nextInt();
//if语句最多有1个else语句,else语句在所有的else if语句之后
//if语句可以有若干个else if语句,他们必须在else语句之前
//一旦其中一个else if语句检测为true,其他的else if以及else语句都将跳过执行
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语句是合法的。也就是说你可以在另一个if或者else if语句中使用if或者else if语句,你可以像if语句一样嵌套else if…else
switch多选择结构
多选择结构还有一个实现方式就是switch case语句。
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
switch语句中的变量类型可以是:
- byte、short、int或者char
- 从Java se7开始,switch支持字符串类型
- 同时case标签必须为字符串常量或字面量
public class Demo01 {
public static void main(String[] args) {
char grade = 'G';
switch(grade){
case 'A':
System.out.println("优秀");
break; //如果不加break就会形成case穿透
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: //从程序中找不到就会执行default
System.out.println("未知等级");
}
}
}
循环结构
while循环
-
while是最基本的循环
-
只要布尔表达式为true,循环就会一直执行下去
-
我们大大多数是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
-
少部分情况需要循环一直执行,比如服务器的请求响应监听等
-
循环条件为true就会造成无限循环(死循环),我们正常的业务编程中应该尽量避免死循环,会影响程序或者造成程序卡死奔溃
public class Deom01 {
//输出1~100
public static void main(String[] args) {
int i = 0;
while( i<100 ){
i++;
System.out.println(i);
}
}
}
public class Demo02 {
public static void main(String[] args) {
//计算1+2+3+...+100=?
int i = 0;
int sum = 0;
while (i<=100){
sum = i+sum;
i++;
}
System.out.println(sum); //5050
}
}
do…while循环
- 对于while而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,但也至少执行一次。
- do…while循环和while循环相似,不同的是,do…while循环至少会执行一次
public class Demo01 {
public static void main(String[] args) {
int a = 0;
while(a<0){ //条件不成立不执行
System.out.println(a);
a++;
}
System.out.println("============");
do{
System.out.println(a);
a++;
}while (a<0); //条件不成立,但是执行了一次
}
}
while和do…while的区别
- while先判断后执行,dowhile是先执行后判断!
- 都while总是保证循环体会被至少执行一次!这是他们的主要差别
for循环
- 虽然所有循环结构都可以用while或者dowhile表示,但java提供了另一种语句——for循环,使一些循环结构变得更加简单
- for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
- for循环执行的次数是在执行钱就确定的。
public class Demo02 {
public static void main(String[] args) {
int a = 0; //初始化语句
while (a<3){ //条件判断语句
a++; //条件控制语句
System.out.println(a); //循环体
}
System.out.println("while循环");
//初始化语句;条件判断语句;条件控制语句
for (int i = 0; i < 3; i++) {
System.out.println(i); //循环体
}
System.out.println("for循环");
}
}
输出结果
1
2
3
while循环
0
1
2
for循环
public class Demo02 {
public static void main(String[] args) {
int a = 0; //初始化语句
while (a<3){ //条件判断语句
System.out.println(a); //循环体
a++; //条件控制语句
}
System.out.println("while循环");
//初始化语句;条件判断语句;条件控制语句
for (int i = 0; i < 3; i++) {
System.out.println(i); //循环体
}
System.out.println("for循环");
}
}
输出结果
0
1
2
while循环
0
1
2
for循环
注意
通过两端代码我们发现,for循环中的条件控制语句是在循环体执行一次后才开始执行的
- for循环中最先开始执行初始化语句,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句
- 然后,检测条件判断语句,如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后边的语句
- 执行一次循环后,接着开始执行条件控制语句
- 再次检测条件判断语句,循环执行上边的过程