Java流程控制
用户交互Scanner
Scanner基本使用
Scanner对象
-
之前学习的Java基础语法并没有实现程序和人之间的交互,Java中有这样一个工具类,我们可以获取用户的输入。java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。
-
基本语法
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
next()和nextLine()区别
- next():
- 一直等待读取到有效字符串以后才可以结束输入
- 对输入有效字符串之前遇到的空白,next()方法会自动将其去除
- 只有输入有效字符后才将其后面的空白作为分隔符或者是结束符
- 总之:next()不能得到带有空白的字符串
- nextLine():
- nextLine()是以Enter作为结束符,nextLine()方法可以得到输入回车Enter之前的所有字符
- nextLine()可以得到空白字符
实操
package com.baidu.Scanner;
import java.util.Scanner;
public class Demo0 {
public static void main(String[] args) {
//创建一个扫描器对象,用来接受键盘数据
Scanner scanner = new Scanner(System.in); // 创建Scanner对象时已经开始接受输入
System.out.println("请输入:");
//判断用户有没有输入字符串
if(scanner.hasNext()) {
//next方式存有用户输入的内容
String content = scanner.next();
System.out.println("输入内容:"+content);
}
// 凡是属于IO流的类用完就需要关闭,否则它会一直占用资源
scanner.close();
}
}
F:\JAVA\jdk1.8\bin\java.exe
请输入:
hello world
输入内容:hello
package com.baidu.Scanner;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
if(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("输入结果是:"+str);
}
scanner.close();
}
}
F:\JAVA\jdk1.8\bin\java.exe
请输入:
hello world
输入内容:hello world
Scanner进阶使用
Scanner类里还有许多方法和属性
package com.baidu.Scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入浮点数:");
if(scanner.hasNextFloat()){
float num = scanner.nextFloat();
System.out.println("浮点数为:"+num);
}else{
System.out.println("请输入浮点数");
}
scanner.close();
}
}
小练习
我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出运行结果
package com.baidu.Scanner;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出运行结果
Scanner scanner = new Scanner(System.in);
double sum = 0.0;
int number = 0;
System.out.println("开始输入");
while(scanner.hasNextDouble()){
sum += scanner.nextDouble();
number++;
System.out.println("已有"+number+"个数求和;"+"和为:"+sum);
}
System.out.println("和为:"+sum+";平均数为:"+(sum/number));
scanner.close();
}
}
顺序结构
- Java的基本结构是顺序结构,除非特别声明,否则就按照顺序一句一句执行。
- 顺序结构是最简单的算法结构,语句与语句之间,是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
选择结构
if型选择结构
-
if单选择结构
if(布尔表达式){ 布尔值为True则执行 }
-
if双选择结构
if(布尔表达式){ 布尔值为True则执行 }else{ 布尔值为False则执行 }
-
if多选择结构
if(布尔表达式1){ 布尔值1为True则执行 }else if(布尔表达式2){ 布尔值2为True则执行 }else if(布尔表达式3){ 布尔值3为True则执行 }else{ 布尔值3为False则执行 }
-
嵌套的if结构
if(布尔表达式1){ if(布尔表达式2){ 布尔表达式1和2同时为True则执行 } }else{ 布尔表达式1为False则执行 }
switch型选择结构
- switch多选择结构
- 多选择结构还有一个实现方法就是
switch case
语句 switch case
语句判断一个变量与一系列值中的某一个值是否相等,每个值称为一个分支- switch语句中的变量类型可以是:
- byte,short,int或者char
- 从Java SE 7开始,switch支持字符串String类型了
- 同时case标签必须为字符串常量或者字面量
- 多选择结构还有一个实现方法就是
package com.baidu.Struct;
import java.util.Scanner;
public class Switch {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的name:");
if(scanner.hasNextLine()){
String name = scanner.nextLine();
switch (name){
case "BUTLER":
System.out.println("BUTLER");
break;
case "Jimmey":
System.out.println(name);
default:
System.out.println("name不存在");
}
}else{
System.out.println("请输入你的name");
}
scanner.close();
}
}
IDEA反编译
Java文件如何执行?在前面已经提到过了 .java文件经过编译器编译后变成 .class文件然后再解释 .class文件就成功执行了java文件。
那么如果拿到一个 .class文件有没有办法把它反编译成 .Java文件?有很多软件可以实现这一操作,我们的IDEA也可以实现该操作
Project compiler output:项目编译器的编译输出
这里有我们的class文件
打开 .class文件。因为 .class文件是字节码文件,所以我们这里也看不明白。我们把该文件放到我们的IDEA里就可以看懂了
把它拖进IDEA以后,我们发现它可以被我们读懂了。(这就是经过IDEA反编译 .class文件后的结果)
hashcode
我们可以看到在switch进行比较时把字符串转换成立hashcode,那么什么是hashcode?Java中每一个对象都会有一个hashcode。
循环结构
while循环
while(布尔表达式){
布尔表达式为真
}
Dowhile循环
do{
循环体
}while(布尔表达式);
for循环
快捷键:100.for
fori
for(初始化;布尔表达式;更新)
{
循环体
}
练习:用for输出1000以内能被5整除的整数,每3个换一行
package com.baidu.Struct;
import java.util.Arrays;
public class forDeom02 {
public static void main(String[] args) {
//用for输出1000以内能被5整除的整数,每3个换一行
for (int i = 0,count = 0; i <= 1000; i++) {
if(i%5==0) {
count++;
System.out.print(i + " ");
if (count == 3) {
System.out.println();
count = 0;
}
}
}
}
}
99乘法表
package com.baidu.Struct;
public class forDeom02 {
public static void main(String[] args) {
for (int i=1; i<=9; i++) {
for (int j=1; j<=i; j++){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
增强for循环
-
Java5引入了一种主要用于数组和集合的增强型for循环
-
Java增强for循环语法格式如下:
for(声明语句:表达式){ //代码语句 }
-
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。他的作用域定在循环语句部分,其值与数组元素的值相等
-
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
package com.baidu.array;
public class Demo01 {
public static void main(String[] args) {
int[] arr0=new int[3];
int[] arr1=new int[]{1,2,3};
int[] arr3; // 声明一个数组
arr3 = new int[3]; // 创建一个数组
for(int x:arr1){
System.out.println(x);
}
}
}
break & continue
-
(break语句在switch语句中有使用)break在任何循环语句的主体部分,均可用break控制循环。break用于强行退出循环,不执行循环中剩余的部分
-
continue语句用于在循环语句体中,用于终止某次循环过程,即跳出循环体中尚未执行的语句,接着进行下一次是否执行循环的判断
-
关于goto关键字
极少使用,不做要求
打印三角型&Debug
打印三角形
package com.baidu.Struct;
public class forDemo4 {
public static void main(String[] args) {
for(int i=0; i<5; i++){
for(int j=0; j<4-i; j++){
System.out.print(" ");
}
for(int m=0; m<=i; m++){
System.out.print("*");
}
for(int n=0; n<i; n++){
System.out.print("*");
}
System.out.println();
}
}
}
Debug