Java基础语法(二)合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下 。——《道德经》
目录
- Java基础语法(二)
- 十、用户交互 Scanner 类(引用数据类型)
- 十一、随机数类 Random(引用数据类型)(扩展)
- 十二、顺序结构
- 十三、选择结构
- (一)if 条件语句
- (二) if ... else 条件语句
- (三)if ... else if ...多分支语句
- (四)嵌套的 if 条件语句
- (五)switch 多选择结构
- 十四、循环结构
- (一)while 循环语句
- (二)do...while 循环语句
- (三)for循环
- (四)增强 for 循环
- 十五、跳转语句
- (一)break 语句
- (二)continue 语句
- (三)return语句
- (四)关于带标签的break和continue(扩展,不推荐使用)
十、用户交互 Scanner 类(引用数据类型)
- 从 Java 5 后引入 java.util.Scanner 这一个包,我们可以通过 Scanner 这一个类来获取用户的输入 。
- 基本语法:
import java.util.Scanner; //使用Scanner需要先导包 ...... Scanner scanner = new Scanner(System.in); - 通过 Scanner 类的 next() 和 nextLine() 方法获取输入的字符串,在读取前一般需要使用 hasNext() 或 hasNextLine() 判断是否还有输入的数据 。
next():1.一定要读取到有效字符后才能结束输入 。2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉 。3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符 。4.next()不能得到带有空格的字符串!nextLine():1.以 Enter 为结束符,即nextLine()方法返回的是输入回车之前的所有字符 。2.nextLine()可以获取空白! - 用完 Scanner (或者其他 IO 流的类),如果不关闭会一直占用资源,所以用完就关闭是一个好习惯 。
关闭 Scanner:
Scanner s = new Scanner(System.in); ......s.close(); //关闭 Scanner - Scanner 的进阶使用 。
hasNext():用来是否还有输入的字符串next():用来接受控制台录入的字符串hasNextInt() :用来是否还有输入的整数nextInt():用来接受控制台录入的整数hasNextFloat() :用来是否还有输入的浮点数nextFloat():用来接受控制台录入的浮点数hasNextDouble() :用来是否还有输入的浮点数nextDouble():用来接受控制台录入的浮点数
而 hasNextInt() 只有在控制台输入的是整数才返回 true 。
import java.util.Scanner;public class demo01 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int i = 0;double d = 0.0;if(scanner.hasNextInt()){i = scanner.nextInt();System.out.println("i = "+i);}else{System.out.println("输入的不是整数!");}if(scanner.hasNextDouble()){d = scanner.nextDouble();System.out.println("d = "+d);}else{System.out.println("输入的不是小数!");}scanner.close();}}上述代码的三种结果:1.输入整数:20//键盘输入i = 2020//键盘输入d = 20.02.输入小数:3.14//键盘输入输入的不是整数!d = 3.143.输入字符串(非数字)hello//键盘输入输入的不是整数!输入的不是小数!结果分析:1.输入整数:
当输入第一个20时,由于输入的是整数,第一个20被
scanner.nextInt() 接收并赋值给 i 并输出 i = 20 。此时程序
scanner.hasNextDouble() 等待控制台再次输入,所以再次输入第二个20,被scanner.nextDouble() 接收并赋值给 d 并输出 d = 20.0 。2.输入小数:
输入 3.14 时,由于不是整数,无法被
scanner.nextInt() 接收并赋值,所以输出 “ 输入的不是整数!” 。由于输入的 3.14还没被接收,所以会继续给
scanner.nextDouble() 判断和接收 。3.输入字符串:
输入字符串 hello 时,在整个程序中,既没被
scanner.nextInt() 接收也没被scanner.nextDouble() 接收 。原因分析:
为什么输入整数,
scanner.nextDouble()返回 true 并且将整数转换为 double 类型的小数?这就得对
scanner.nextDouble()的源码进行分析 。(按住Ctrl键+点击源程序的scanner.nextDouble()方法查看源代码)
文章插图
Double.parseDouble()是把括号里面String类型的内容变成double类型 。也就是说,当我们在控制台输入整数20时,它在程序中会先被转换为String 类型的字符串赋值给 s,接着通过
Double.parseDouble()是把括号里面String类型的字符串 s 变成double类型然后返回,所以整数20就转换成了double类型的20.0 。为什么输入字符串,
scanner.nextDouble()返回 false?这是因为源代码中 catch 抛出了一个NumberFormatException(数字格式化异常),查看字符串里面夹杂着string或者其他类型 。当输入字符串时,便会返回 false。所以,我们在使用控制台手动输入小数时,不能在小数后面加上 F 或 D,否则报错 。但是在程序中定义数字则可以 。
十一、随机数类 Random(引用数据类型)(扩展)Random类,它可以产生多种数据类型的随机数,在这里主要介绍生成整数与小数的方式 。
- public int nextInt(int maxValue) 产生 [0,maxValue) 范围的随机整数,包含0,不包含maxValue;
- public double nextDouble() 产生 [0,1) 范围的随机小数,包含0.0,不包含1.0 。
//Random 使用方法import java.util.Random; //导包......//Random 变量名 = new Random();Random r = new Random();例子:import java.util.Random;public class RandomDemo { public static void main(String[] args) {// 创建Random类的实例Random r = new Random();// 得到0-100范围内的随机整数,将产生的随机整数赋值给i变量int i = r.nextInt(100);//得到0.0-1.0范围内的随机小数,将产生的随机小数赋值给d变量double d = r.nextDouble();System.out.println(i);System.out.println(d);}}十二、顺序结构- Java包含顺序结构、选择结构和循环结构 。
- Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行 。
- 顺序结构是最简单的算法结构 。
- if 语句可以单独判断表达式的结果,如果满足某种条件就进行某种处理 。
- 语法:
if(布尔表达式){//如果不二表达式为true执行的语句} - 图示:

文章插图
- 【Java基础语法知识 二 Java基础语法】例子:
int a = 10;if(a > 10){return true; } return false
- if 语句后面可以跟 else 语句,只有当 if 语句的布尔表达式值为 false 时,else 语句块才会被执行 。
- 语法:
if(布尔表达式){......//如果布尔表达式的值为true执行的语句}else{......//如果布尔表达式的值为false执行的语句} - 图示:

文章插图
- 例子:
int a = 10; int b = 11; if(a >= b){System.out.println("a >= b"); }else{System.out.println("a < b");}
- if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况 。
- 使用 if,else if,else 语句的时候,需要注意下面几点:
- if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后 。
- if 语句可以有若干个 else if 语句,它们必须在 else 语句之前 。
- 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行 。
- 语法:
if(布尔表达式 1){//如果布尔表达式 1的值为true执行代码}else if(布尔表达式 2){//如果布尔表达式 2的值为true执行代码}else if(布尔表达式 3){//如果布尔表达式 3的值为true执行代码}else {//如果以上布尔表达式都不为true执行代码} - 图示:

文章插图
- 例子:
public class Test {public static void main(String args[]){int grade = 80;if(grade >= 85){System.out.print("优秀");}else if(grade >= 75){System.out.print("良好");}else if(grade >= 60){System.out.print("及格");}else{System.out.print("不及格");}}}
- 使用嵌套的 if…else 语句是合法的 。也就是说可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句 。
- 语法:
if(布尔表达式 1){////如果布尔表达式 1的值为true执行代码if(布尔表达式 2){////如果布尔表达式 2的值为true执行代码}}- 例子
public class Test {public static void main(String args[]){int x = 30;int y = 10;if( x == 30 ){if( y == 10 ){System.out.print("X = 30 and Y = 10");}}}}
- switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支 。
- 语法:
switch(表达式){case value1:...//执行语句break; //可选case value2:...//执行语句break; //可选......default:...//执行语句} - switch case 语句有如下规则:
- switch 语句中的变量类型可以是: byte、short、int 或者 char 。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量 。
- switch 语句可以拥有多个 case 语句 。每个 case 后面跟一个要比较的值和冒号 。
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句 。
- 当遇到 break 语句时,switch 语句终止 。程序跳转到 switch 语句后面的语句执行 。case 语句不必须要包含 break 语句 。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句 。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个) 。default 在没有 case 语句的值和变量值相等的时候执行 。default 分支不需要 break 语句 。
- 例子:
public class Test {public static void main(String args[]){int i = 1;switch(i){case 0:System.out.println("0");case 1:System.out.println("1");case 2:System.out.println("2");case 3:System.out.println("3"); break;default:System.out.println("default");}}}/*输出为:123*/
- while 循环
- do…while 循环
- for 循环
(一)while 循环语句
- while语句会反复地进行条件判断,只要条件成立,{ } 内的语句就会执行,直到条件不成立,while循环就结束 。
- 语法:
while( 布尔表达式 ) {//循环内容} - 图示:

文章插图
- 例子:
public class Test {public static void main(String[] args) {int x = 1;while( x < 4 ) {System.out.println("x = " + x );x++;}}}/*输出:x = 1x = 2x = 3 */
- do…while 循环和 while 循环相似,不同的是,do…while 循环至少会执行一次 。
- 语法:
do {//代码语句}while(布尔表达式);注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了 。如果布尔表达式的值为 true,则语句块一直执行,直到布尔表达式的值为 false 。- 图示:

文章插图
- 例子:
public class Test {public static void main(String[] args){int x = 4;do{System.out.println("x = " + x );x——;}while( x > 0 );}}/*输出:x = 4x = 3x = 2x = 1*/
- for循环执行的次数是在执行前就确定的 。语法格式如下:
for(初始化; 布尔表达式; 操作表达式) {//代码语句}- 具体执行流程:
for(one;two;three){four;}/*第一步,执行one第二步,执行two第三步,执行four第四步,执行three,然后重复执行第二步第五步,退出循环*/ - 例子:
public class Test {public static void main(String[] args) {for(int x = 1; x < 4; x++) {System.out.println("x = " + x );}}}/*输出:x = 1x = 2x = 3 */
- Java5 引入了一种主要用于数组或集合的增强型 for 循环 。
- 语法:
for(声明语句 : 表达式){//代码句子}声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配 。其作用域限定在循环语句块,其值与此时数组元素的值相等 。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法 。
- 例子:
public class Test {public static void main(String[] args){int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ){System.out.print( x );System.out.print(",");}System.out.print("\n");String [] names ={"James", "Larry", "Tom", "Lacy"};for( String name : names ) {System.out.print( name );System.out.print(",");}}}/*输出:10,20,30,40,50,James,Larry,Tom,Lacy,*/
(一)break 语句
- break 主要用在循环语句或者 switch 语句中,用来结束整个循环或者跳出整个语句块 。
- 有多个循环嵌套时,break 跳出其所在循环的最里层的循环 。
public class Test {public static void main(String[] args) {for (int i = 1 ;i <4;i++){for (int a = 4;a > 0;a--){if(a == 2){break;}System.out.print(a + " ");}}}}/*输出4 3 4 3 4 3*/
- continue 适用于任何循环控制结构中 。作用是让程序立刻终止本次循环,直接进行下一次循环的判定 。
在 for 循环中,continue 语句使程序立即跳转到操作表达式语句 。
在 while 或者 do…while 循环中,程序立即跳转到布尔表达式的判断语句 。
- 例子:
public class Test {public static void main(String[] args) {int [] numbers = {10, 20, 30, 40, 50};for(int x : numbers ) {if( x == 30 ) {continue;}System.out.println( x );}}}/*输出:10204050*/
- return语句可以从一个方法返回,并把控制权交给调用它的语句 。
- Java唯一用到标签的地方是在循环语句之前,而在循环语句之前设置标签的原因:
当 break 或 continue 语句出现在嵌套循环时,它只能跳出内层循环,如果想使用 break 或 continue 语句跳出外层循环,则需要对外层循环添加标签,它们就会中断到标签的地方 。
public class Test {public static void main(String[] args) {outer:for (int i = 1 ;i <4;i++){for (int a = 4;a > 0;a--){if(a == 2){break outer; //结束指定标签的那一层循环}System.out.print(a + " ");}}}}/*输出4 3*/- 带标签的 break:结束指定标签的那一层循环 。
- 带标签的 continue:结束一次指定标签的那一层循环 。
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
