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();
    }
}

AI能反编译JAVA 代码吗_字符串

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流用完关掉会节省空间
    }
}

AI能反编译JAVA 代码吗_反编译_02

小练习:判断数据类型

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();
    }
}

AI能反编译JAVA 代码吗_java_03

常用结构

顺序结构

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");
        }
    }
}

AI能反编译JAVA 代码吗_字符串_04

新知识:反编译

如果我们用switch匹配String类型的话,计算机是不会直接用字符串来匹配的,这时候我们可以通过反编译来查看字节码文件

我们发现如果直接打开字节码文件会是一堆乱码看不懂

(打开字节码文件步骤)

AI能反编译JAVA 代码吗_AI能反编译JAVA 代码吗_05


AI能反编译JAVA 代码吗_反编译_06

这时就需要我们反编译,反编译的工具有很多,IDEA也可以实现

首先我们打开想查看的class文件目录,将对应的字节码文件拷贝赶过去,再打开IDEA,工程目录下就有了对象的反编译class文件,我们打开就可以了

AI能反编译JAVA 代码吗_反编译_07

(因为我没有手动编写String的匹配,借用一下我学习的网课的截图)

AI能反编译JAVA 代码吗_java_08

发现计算机将其转化为哈希来进行判断

循环机构

while结构

不满足条件一次都不循环,先判断再循环

do…while循环

即使不满足条件,至少循环一次,先循环在判断

for循环(重要)

for(初始化值;布尔表达式;更新){
    语句
}

最有效最灵活的的循环结构

快捷键:100.for(大家都试试,超方便!)

AI能反编译JAVA 代码吗_字符串_09

死循环写法:

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

用于终止某次循环过程,接着进行下一次循环判定