Java流程控制(基础)
用户交互Scanner
调运java.util.Scanner来获取用户输入
基本语法:
Scanner s=new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
nextLine():
一Enter作为结束符,可以获得空白
package com.Base.Scanner;
import java.util.Scanner;
public class Demo2 {
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();
}
}
next():
一定读取到有效字符后在可以结束输入
不能得到带空格的字符串
它以有效字符后的空格为结束符
package com.Base.Scanner;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
//创建一个扫描器对象,接收键盘数据
Scanner scanner=new Scanner(System.in);
System.out.println("使用next方式接受");
//判断用户是否输入字符串
if(scanner.hasNext()){
String str = scanner.next();//使用next接受
System.out.println("输入内容为:"+str);
}
scanner.close();//IO流用完关掉会节省空间
}
}
小练习:判断数据类型
package com.Base.Scanner;
import java.util.Scanner;
public class Demo3 {
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();
}
}
小练习:求数据和
package com.Base.Scanner;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
//输入多个数字求和,每个数字用回车确认,非数字就结束输入
Scanner scanner= new Scanner(System.in);
double sum=0;
//数量
int m=0;
while(scanner.hasNextDouble()){
double x=scanner.nextDouble();
m=m+1;
sum=sum+x;System.out.println("你输入了地"+m+"个数据,当前结果为:"+sum);
}
System.out.println(m+"个数的和:"+sum);
scanner.close();
}
}
常用结构
顺序结构
java的基本结构,从上往下一条一条执行
它是任何算法都不开的基本算法结构
选择结构(重点)
if单选
package com.Base.struct;
import java.util.Scanner;
public class IfDemo1 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.println("请输入:");
String s= scanner.nextLine();
//equals判断字符串是否相等
if(s.equals("hello")){
System.out.println(s);
}
else
{
System.out.println("erro");
}
scanner.close();
}
}
if双选
package com.Base.struct;
import java.util.Scanner;
public class IfDemo1 {
public static void main(String[] args) {
Scanner scanner =new Scanner(System.in);
System.out.println("请输入:");
int s=scanner.nextInt();
if(s>60)
{
System.out.println("及格");
}
else{
System.out.println("不及格");
}
scanner.close();
}
}
if多选
嵌套if
switch多选结构
switch case 语句判断一个变量与一些列值中某个值是否相等,每个值成为一个分支。
//基本结构
switch (expression){
case value:
//语句
break;//可选
case value:
//语句
break;//可选
case value:
//语句
break;//可选
case value:
//语句
break;//可选
default://可选
//语句
}
switch语句变量的类型:
- byte 、short、int、char
- 从Java SE7开始,支持String类型
- case标签必须为字符串常量或字面量
注意case穿透现象:如果没有break会全部输出直到遇见break
package com.Base.struct;
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
char grade = 'A';
//case穿透、switch匹配一个值
switch(grade){
case 'A':
System.out.println("perfect");
//break;
case 'B':
System.out.println("good");
break;
case 'C':
System.out.println("nice");
break;
default:
System.out.println("soso");
}
}
}
新知识:反编译
如果我们用switch匹配String类型的话,计算机是不会直接用字符串来匹配的,这时候我们可以通过反编译来查看字节码文件
我们发现如果直接打开字节码文件会是一堆乱码看不懂
(打开字节码文件步骤)
这时就需要我们反编译,反编译的工具有很多,IDEA也可以实现
首先我们打开想查看的class文件目录,将对应的字节码文件拷贝赶过去,再打开IDEA,工程目录下就有了对象的反编译class文件,我们打开就可以了
(因为我没有手动编写String的匹配,借用一下我学习的网课的截图)
发现计算机将其转化为哈希来进行判断
循环机构
while结构
不满足条件一次都不循环,先判断再循环
do…while循环
即使不满足条件,至少循环一次,先循环在判断
for循环(重要)
for(初始化值;布尔表达式;更新){
语句
}
最有效最灵活的的循环结构
快捷键:100.for(大家都试试,超方便!)
死循环写法:
package com.Base.struct;
public class ForDemo01 {
public static void main(String[] args) {
for (; ; ) {
System.out.println("awsl");
}
}
}
小练习
- 输出1-100内能被5整除的数,且三个一行
package com.Base.struct;
public class ForDemo01 {
public static void main(String[] args) {
for (int i = 1; i <=100; i++) {
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0){
System.out.println();//换行
System.out.print("\n");//换行
}
}
}
}
小细节:
println输出完换行
print一直连着输出
换行的两种方式
System.out.println();//换行
System.out.print("\n");//换行
- 输出99乘法表
package com.Base.struct;
public class ForDemo01 {
public static void main(String[] args) {
//99乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <=i; j++) {
System.out.print(j+"*"+i+"="+i*j+"\t");
//if(j==9)
}
System.out.println();
}
}
}
99乘法的栗子的具体思路请戳 这里
(Java5新增)增强型for循环
数组、集合的时候重点使用
主要是用来简化普通for循环输出数组的步骤
int[] num={10,42};//定义了一个数组
//遍历数组
for(int x:num){
System.out.println(x);
}
break&continue
都可以用来终止循环,但有区别
break
用于强制退出循环,不执行剩下的语句
continue
用于终止某次循环过程,接着进行下一次循环判定