JAVA学习打卡第三天
用户交互Scanner
-
java提供了一个工具类——Scanner(java.util.Scanner),使得我们可以获取用户的输入
-
基本语法:
Scanner s = new Scanner(System.in);
-
通过Scanner类的**next()与nexLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()**判断是否还有输入的数据
- next():
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前的空白,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
import java.util.Scanner; public class Demo_01{ public static void main(String[] args){ //创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.println("使用next方式接收:"); //判断用户有没有输入字符串 if (scanner.hasNext()){ String str = scanner.next(); System.out.println("输出的内容为:" + str); } //凡是属于IO流的类,用完若不关闭就会一直占用资源 scanner.close(); } }
- next():
-
nextLine()
-
以Enter为结束符,即nextLine()方法会返回输入回车之前的所有字符
-
可以获得空白
import java.util.Scanner; public class Demo_02 { 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可以理解为一个队列,hasNext()和hasNextLine()是判断队列中有没有值,如果有,则返回true,如果没有,不会返回 false,而是等待用户输入一个值,再判断(所以上述代码中的 if 语句都没有必要,可以简化写成下面的形式)。next()和nextline()是从这个队列中获取值(将队列第一个元素取出并赋值给变量),若队列中没有值,则等待用户输入一个值
import java.util.Scanner; public class Demo_02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("使用nextLine方法接收:"); String str = scanner.nextLine(); System.out.println("输出内容为:" + str); scanner.close(); } }
-
scanner进阶——scannerInt()、scannerFloat() 等
import java.util.Scanner; public class Demo_03 { 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(); } }
-
理解:hasNextInt()方法是判断队列scanner中第一个元素是否为 Int 类型,如果是,则返回 true,如果不是,则返回 false,如果队列中没有值,则停止运行,等待用户输入值;nextInt() 方法会先检查队列中有没有元素,如果有,则判断第一个值是否为 Int 类型,如果是,则取出,如果不是,则报错,如果队列中没有元素,则停止运行,等待用户输入,再进行判断
顺序结构
-
顺序结构是Java的基本结构,除非特别指明,否则就按照顺序一句一句执行
-
语句与语句之间是按从上而下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的基本算法结构
public class Demo_04 { public static void main(String[] args) { System.out.println("hello_1"); System.out.println("hello_2"); System.out.println("hello_3"); System.out.println("hello_4"); System.out.println("hello_5"); } }
选择结构
-
if单选则结构
- 很多时候需要去判断一个东西是否可行,然后才去执行,这样一个过程在程序中用if语句来表示
-
语法:
if(布尔表达式){ //如果布尔表达式为true将要执行的语句 }
-
示例
import java.util.Scanner; public class Demo_05 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容"); String s = scanner.nextLine(); if (s.equals("Hello")){ //equal------------->比较字符串 System.out.println(s); } System.out.println("End"); scanner.close(); } }
-
if双选择结构
-
结构示意图
-
语法
if(布尔表达式){ //如果布尔表达式的值为true }else{ //如果布尔表达式的值为false }
-
示例
import java.util.Scanner; public class Demo_06 { public static void main(String[] args) { //考试分数大于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多选择结构
-
结构示意图
-
语法
if(布尔表达式1){ //如果布尔表达式1的值为true }else if(布尔表达式2){ //如果布尔表达式2的值为true }else if(布尔表达式3){ //如果布尔表达式3的值为true }else{ //如果以上布尔表达式都不为true }
-
示例
import java.util.Scanner; public class Demo_07 { 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("成绩不合法"); } } }
-
-
嵌套的if结构
-
使用嵌套的if…else语句是合法的。也就是说你可以在另一个if或者else if语句中使用if或者 else if语句。
-
语法:
if(布尔表达式1){ //如果布尔表达式1的值为true if(布尔表达式2){ //如果布尔表达式2的值为true } }
-
-
switch多选择结构
-
switch case语句是多选择结构的另一种实现方式
-
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
-
语法
switch(expression){ case value: //语句 break;//可选 case value: //语句 break;//可选 //你可以有任意数量的case语句 default://可选 //语句 }
-
switch语句中的变量类型可以是
- byte、short、int或者char
- switch支持字符串String类型
- case标签必须为字符串常量或字面量
-
示例
public class Demo_08 { public static void main(String[] args) { 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("未知等级"); } } }
-
理解:“switch”是一条走廊,grade是一把钥匙,case是走廊上的门,case后面的 value 是门上的锁,通过钥匙,可以进入对应的门,然后顺着走廊一直往下走,,除非遇到“break”后被“赶出”
-
循环结构
-
while循环
-
while是最基本的循环,它的结构为:
while (布尔表达式){ //循环内容 }
-
只要布尔表达式为true,循环就会一直执行下去
-
我们大多数情况下是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环
-
少部分情况需要循环一直执行,比如服务器的请求响应监听等
-
循环条件一直为true就会造成无限循环(死循环),我们正常的业务编程中应该尽量避免死循环。会影响程序性能或者造成程序卡死崩溃
-
示例
public class Demo_09 { public static void main(String[] args) { //计算 1+2+3+……+100 int i = 0; int sum = 0; while(i <= 100){ sum = sum + i; i++; } System.out.println(sum); } }
-
-
do…while循环
-
对于while语句而言,若不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次
-
do…while循环和while循环相似,不同的是,do…while循环至少会执行一次
-
语法:
do{ //代码语句 }while(布尔表达式);
-
示例
public class Demo_10 { public static void main(String[] args) { //计算 1+2+3+……+100 int i = 0; int sum = 0; do{ sum = sum + i; i++; }while(i<=100); System.out.println(sum); } }
-
while与do…while对比
public class Demo_11 { 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); } }
-
-
for循环
-
虽然所有循环结构都可以用while或do…while表示,但Java提供了另一种语句——for循环,使一些循环结构变得更加简单
-
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
-
for循环执行的次数是在执行前就确定的。
-
语法:
for(初始化;布尔表达式;更新){ //代码语句 }
-
示例
public class Demo_12 { public static void main(String[] args) { //初始化//布尔表达式//更新 for(int i = 1;i <= 100;i++){ System.out.println(i); } System.out.println("for循环结束"); } }
-
print 与 println 的区别:print输出完后不会换行,println输出完后会换行
-
-
增强for循环
-
增强for循环主要用于数组或者集合
-
语法
for(声明语句 : 表达式){ //代码语句 }
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等
-
表达式:表达式是要访问的数组名,或者是返回值为数组的方法
-
示例
public class Demo_13 { public static void main(String[] args) { int[] numbers = {10, 20, 30, 40, 50}; //遍历数组元素 for(int x:numbers){ System.out.println(x); } } }
-
break & continue
-
break可用于任何循环语句的主体部分,用来控制循环的流程。其用于强行退出循环,不执行循环中剩余的语句
-
continue语句用在循环语句体中,用于终止某次循环过程,即即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
-
Java中没有goto(仍有goto关键字,但未得到正式使用),然而,在break和continue这两个关键字身上,我们仍然能够看出一些goto的影子——带标签的break和continue
-
示例(break and continue)
public class Demo_14 { public static void main(String[] args) { int i = 0; while(i < 100){ i++; System.out.println(i); if(i == 30){ break;//当i = 30时就退出 } } int j = 0; while(j < 100){ j++; if(j % 10 == 0){ System.out.println(); continue; } System.out.print(j); } } }
-
示例(带标签的continue)
public class Demo_15 { public static void main(String[] args) { //打印101~105之间所有的质数 int count = 0; outer:for(int i = 101;i < 150;i++){ for(int j = 2;j < i / 2;j++){ if(i % j == 0){ continue outer; } } System.out.print(i+" "); } } }