java基础_05_流程控制

 

 

一、用户交互Scanner

(译:扫描器)

 

1、使用next方法接收,只接收空格以前的
package liuchengkongzhi;

import java.util.Scanner;

public class Scanner01 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner Scanner =  new Scanner(System.in);
                         //new Scanner 会自动导入上面的包 import
                         //System out 输出,System in 输入参数
        System.out.println("使用naxt方式接收: ");

        //判断用户有没有输入字符串
        if (Scanner.hasNext()){
            String str = Scanner.next(); //使用naxt方式接收
            System.out.println("输出入的内容为:"+str); //输入:xiao di 输出结果:xiao
                                                   //使用next方法接收,只接收空格以前的

            Scanner.close(); //IO控制流的类,如果不关闭,会一直占用资源
        }
    }
}

 

 

2、使用nextLine方法接收,只要是回撤键之前的都可以输出

package liuchengkongzhi;

import java.sql.SQLOutput;
import java.util.Scanner;

public class Scanner02 {
    public static void main(String[] args) {
        Scanner Scanner = new Scanner(System.in); //new Scanner 从键盘接收数据
        System.out.println("使用nextLine方法接收: ");
        if (Scanner.hasNextLine()){ //判断是否还有输入
            String str = Scanner.nextLine(); //等待用户输入
            System.out.println("输出的内容为:"+str);   //输入:xiao di 输出结果:xiao di
                                                     //使用nextLine方法接收,只要是回撤键之前的都可以输出
            Scanner.close();
        }
    }
}

 

3、没有if 的写法

package liuchengkongzhi;

import java.util.Scanner;

//没有if 的写法
public class Scanner03 {
    public static void main(String[] args) {
        Scanner Scanner =  new Scanner(System.in); //从键盘接收输入
        System.out.println("请输入参数: ");  //等待输入

        String str = Scanner.nextLine(); //输入的内容保存到变量 str
        System.out.println("输出的内容为:"+str);

        Scanner.close();
        }
}

 

4、Scanner拓展1;hasNextInt,hasNextFloat整数小数相关的支持

package JavaBase.liuchengkongzhi;

import java.util.Scanner;

public class Scanner04 {
    public static void main(String[] args) {
        Scanner Scanner = new Scanner(System.in); //从键盘接收数据
//Scanner拓展1;hasNextInt,hasNextFloat整数小数相关的支持
        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();
    }
}

 

5、Scanner拓展2, while循环

     题:我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束,并输出执行结果;
package JavaBase.liuchengkongzhi;

import java.util.Scanner;

public class Scanner05 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//Scanner拓展2, while循环
        //题:我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束,并输出执行结果;

        double sum = 0; //
        int m =0; //计算输入了多少个数字

        System.out.println("请依次输入: "); //等待输入
        while (scanner.hasNextDouble()){ //while循环输入
            double x = scanner.nextDouble(); //把输入的数据赋值变量x
            m = m +1; //m++ 循环自增
            sum = sum +x; //循环求和
            System.out.println("你输入了第"+m+"个数当前结果sum="+sum);

        }

        System.out.println(m + "个数的和为" + sum);
        System.out.println(m + "个数的平均值是"+(sum / m));

       scanner.close();
    }
}

 

二、顺序结构

 

package JavaBase.liuchengkongzhi;

public class shunxu_Struct01 {
    public static void main(String[] args) {
        //顺序结构
        System.out.println("hello1");
        System.out.println("hello2");
        System.out.println("hello3");
        System.out.println("hello4");
        System.out.println("hello5");
        /*输出结果
        hello1
        hello2
        hello3
        hello4
        hello5
        * */
    }
}

 

三、选择结构

大纲

 

 

1、IF单选择结构

 

package JavaBase.liuchengkongzhi;

import java.util.Scanner;

public class If_01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//IF单选择结构

        System.out.println("请输入内容: ");
        String s = scanner.nextLine(); //键盘输入的内容赋值s

        //equals方法:判断字符串是否一致
        if (s.equals("hello")){ //如果变量s=hello
            System.out.println(s); //就输出变量s的值

        }
        System.out.println("End"); //输出end
        scanner.close();
    }
}

 

2、IF 双选择结构 if else

 

   
//题:考试分数大于60就是及格,小于60就是不及格;
package JavaBase.liuchengkongzhi;

import java.util.Scanner;

public class If_02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//IF 双选择结构 if else
        //题:考试分数大于60就是及格,小于60就是不及格;


        System.out.println("请输入成绩: ");
        int score = scanner.nextInt();

        if (score>=60){
            System.out.println("及格");
        }else {
            System.out.println("不及格");
        }
        scanner.close();
    }
}

 

 

3、IF多选择结构 if-else if-else

 

package JavaBase.liuchengkongzhi;

import java.util.Scanner;

public class If_03 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//IF多选择结构 if-else if-else
        //只要满足一个条件,其他的就不会执行了。
        //if语句至多有一个else,在所有else if之后
        //

        System.out.println("请输入成绩");
        int score = scanner.nextInt();

        if (score==100){
            System.out.println("A级");
        }else if (score<=100 && score>=90){
            System.out.println("B级");
        }else if (score<=90 && score>=80){
            System.out.println("c级");
        }else if (score<=80 && score>=60){
            System.out.println("D级");
        } else if (score<=59 && score>=0){
            System.out.println("不及格");
        }else {
            System.out.println("成绩不合法");
        }

        scanner.close();
    }
}

 

4、嵌套的IF机构

 5、switch多选择结构

 5.1:Switch的Case穿透性——break

package JavaBase.liuchengkongzhi;

public class Switch_01 {
    public static void main(String[] args) {
        char grade = 'B';
//Switch:匹配一个具体的值,IF是匹配条件,执行case语句时会先匹配,成功即返回当前case的值,然后根据是否有break语句,判断是否输出。
// Case穿透:即如果没有输入break时,会把下方所有的结果都输出,所以一般我们每一个case都会加上break;
        switch (grade) {
            case 'A':
                System.out.println("优秀");
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("及格");
                break; //可选项,如果不写break,就是把下面的几个结果都输出来,
                              //以上代码grade=B,会输出良好、及格两个结果,如果这里不加break,则会把挂科、未知等级也输出
            case 'D':
                System.out.println("挂科");
            default: //默认,即在以上条件中都找不到的时候直接默认输出的结果。是可选项:
                System.out.println("未知等级");
        }
    }
}

 

5.2:Switch的规范写法

package JavaBase.liuchengkongzhi;

public class Switch_02 {
    public static void main(String[] args) {
        char grade = 'G'; //输出结果为未知等级
//Switch_02_规范写法
        switch (grade) {
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
                break;
            case 'C':
                System.out.println("及格");
                break;
            case 'D':
                System.out.println("挂科");
                break;
            default:
                System.out.println("未知等级");
        }
    }
}

 

5.3 Switch匹配字符串,以及java的反编译常识

package JavaBase.liuchengkongzhi;

public class Switch_03 {
    public static void main(String[] args) {
//Switch_03 JDK7以后支持String字符串
        //字符的本质是数字,本处就是使用了idea反编译
        //java文件通过编译后成为class文件(字节码文件),字节码文件,人是看不懂的,人要想看懂。所以需要反编译,编译为java程序。

        String name = "小帝";//输出结果:匹配

           switch (name){
               case "小帝":
                   System.out.println("匹配");
                   break;
               default:
                   System.out.println("不匹配");
           }
        }
    }

 

反编译怎么看???

 

 

 

 反编译后的样子

 

 

四、循环结构

顺序结构的语句只能执行一次,要想多次执行,就需要使用循环结构了

 

1、while循环

 

 1.1 while循环基础语法

package JavaBase.liuchengkongzhi;

public class While_01 {
    public static void main(String[] args) {
        //while循环基础定义

        int i = 0;
        while (i<100){ //(i<100)为真true,就会执行代码,即i大于100时,就失效停止
            i++;
            System.out.println(i);//输出了1-100;
        }

        /**
         * 如果使用顺序结构,代码如下
         * int i =1;
         *  System.out.println(i++);
         *  System.out.println(i++);
         *  。。。。继续写100条sout.
         */

        /**
         * 死循环,有时候业务中可能需要一直循环的,如等待客户端连接,定时检查,代码如下
         * while(true){}
         * 以上代码没有条件去失效,所以会一直执行
         * 开发时应尽量避免这种代码,会影响程序性能
         */
    }
}

 

1.2、while循环例题

package JavaBase.liuchengkongzhi;

public class While_02 {
    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); //输出结果5050
    }
}

2、Do While 循环

 2.1、Do while 基础语法

package JavaBase.liuchengkongzhi;

public class Do_while_01 {
    public static void main(String[] args) {
//Do while基础语法
        int i = 0;
        int sum = 0;
        do {
            sum = sum +i;
            i++;
        }while (i<=100);//while在后,所以条件至少执行了一次,
        System.out.println(sum);//输出结果5050
    }
}

2.2、while循环和 Do while循环的区别

while先判断再执行

dowhile先执行再判断

 

package JavaBase.liuchengkongzhi;

public class Do_while_02 {
    public static void main(String[] args) {
        int a = 0;
        while (a<0){
            System.out.println(a);//由于上面的while循环条件不成立,所以这条根本就没有执行,所以在下面的分隔符之前没有输出
            a++;
        }
        System.out.println("========================");
        do {
            System.out.println(a);//这里输出了一个0,虽然do while的条件也是不成立,但是至少先执行了一次。
            a++;
        }while (a<0);
    }
}

/*最终输出结果:

========================
0

* */

 

 

3、For循环

for循环是工作中,用的最多的,非常重要;

for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构;

 

3.1、For循环基础语法,和While循环的区别

package JavaBase.liuchengkongzhi;

public class For {
    public static void main(String[] args) {
//For循环基础语法,和while循环的区别
        

//1、while循环的语法 int a = 1; //初始化条件 while (a<=10){ //条件判断 System.out.println(a); // 循环体 a+=2; //迭代 } System.out.println("While循环结束"); //2、For循环语法 for (int b=1;b<=10;b+=2){ //(初始化;布尔表达式;更新) System.out.println(b); } System.out.println("For循环结束"); } } /* 1、以上两个循环语句实际计算结果是一致的,只是语法不同 2、快捷键:100.for 回车。就可以自动生成for循环语句 3、关于for循环有以下几点说明: 最先执行初始化步骤,可以声明一种类型,可以初始化一个或者多个循环控制变量,也可以是空语句; 然后简称布尔表达式的值,如果为true,循环体被执行,如为false,循环终止,开始执行循环体后面的语句; 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减) 再次检测布尔表达式,循环执行上面的过程 for(;1<100;i++){} for(;;i++){} //死循环 for(;;){} //死循环 * */

 

 

3.2、题一:计算0到100之间的奇数和偶数的和

package JavaBase.liuchengkongzhi;

public class For_02 {
    public static void main(String[] args) {
        //题1:计算0到100之间的奇数和偶数的和

        int oddsum = 0; //定义奇数和
        int evensum = 0; //定义偶数的和

        for (int i=1;i<=100;i++){
            if (i%2!=0){
                oddsum+=i; //如果i不能被2整除那么i就是奇数,则oddsum=oddsum+i
            }else {
                evensum+=i;
            }
        }
        System.out.println(oddsum);
        System.out.println(evensum);
    }
}

 

 

3.3、题二:用whIle或者for 循环输出1-1000之间能被5整数的数,每行输出3个

package JavaBase.liuchengkongzhi;

public class For_o3 {
    public static void main(String[] args) {

//题2:用whIle或者for 循环输出1-1000之间能被5整数的数,每行输出3个
        for (int i=0; i<=100; i++) {
            if (i%5==0){
                System.out.print(i+"\t");// 空格tab \t
                                         // print 不会换行,printl会换行
            }
            if (i%(5*3)==0){ //如果能被15整除就换行,即每行3个
                System.out.println();
                //System.out.println("\n"); // 加/n或者println都可以换行
            }
        }
        System.out.println("For循环结束");

        //While循环方式
        int a =0;
        while (a<=100){
            if (a%5==0){
                System.out.print(a+"\t");
            }
            if (a%(5*3)==0){
                System.out.println();
                //System.out.println("\n"); // 加/n或者println都可以换行
            }
            a++;
        }
        System.out.println("While循环结束");
    }
}

 

3.4、题三:打印九九乘法表

package JavaBase.liuchengkongzhi;

public class For_04 {
    public static void main(String[] args) {
        //打印九九乘法表
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(j + "*" + i + "=" + (j * i)+"\t");

            }
            System.out.println();
        }


        //第一步:先输出1乘9
        System.out.println("=====第一步=begin====");
        for (int i1 = 1; i1 <= 9; i1++) {
            System.out.println(1 + "*" + i1 + "=" + (1 * i1));
        }
        System.out.println("=====第一步=end====");

        //第二步:再来一次for循环,使1-9每一个数都乘以1-9;但是这时候是有一半是重复的,比如1*9.就有两次。
        System.out.println("=====第二步=begin====");
        for (int i3 = 1; i3 <= 9; i3++) {
            for (int i2 = 1; i2 <= 9; i2++) {
                System.out.println(i3 + "*" + i2 + "=" + (i3 * i2));
            }
        }
        System.out.println("=====第一步=end====");

        //第三步:将嵌套内的for循环i4 <= 9改为,i4 <= i5,这样的话,就可以去掉重复
        System.out.println("=====第三步=begin====");
        for (int i5 = 1; i5 <= 9; i5++) {
            for (int i4 = 1; i4 <= i5; i4++) {
                System.out.println(i5 + "*" + i4 + "=" + (i5 * i4));
            }
        }
        System.out.println("=====第三步=end====");
        //最后一步调整样式
    }
}

 

4、增强For循环:遍历数组的元素

 

package JavaBase.liuchengkongzhi;

public class For_05 {
    public static void main(String[] args) {

        int[] numbers = {10,20,30,40,50};//定义了一个数组

        //方案一:增强For循环:遍历数组的元素
        for (int x:numbers){ //把numbers这个数组每一项遍历出来,赋值给x
            System.out.println(x); //所以输出结果就是10,20,30,40,50
        }


        //方案二:用基础for循环实现的遍历
        for (int i = 0; i < 5; i++) {
            System.out.println(numbers[i]); //在数组numbers里取出从0-5位数。
                                            //这样操作,输出结果也是10,20,30,40,50
        }

        //以上两种方法,核心是一样的,只不过,增强For循环,是更简单省事的。主要是用来循环数组和集合的;
    }
}

 

 

5、break 和continue

 

5.1、break 和continue的区别

package JavaBase.liuchengkongzhi;

public class break_continue_01 {
    public static void main(String[] args) {
//break在循环语句中的使用方法
        int i = 0;
        while (i<100){ //i小于100时执行以下代码
            i++;
            System.out.println(i);
            if (i==10){
                break; //break在循环语句中时,用于强行退出循环,所以这里的输出结果是1-10,不是1-100;直接不执行循环中剩余的语句了。
            }
        }
        System.out.println("===============");

//break在switch语句中是用于防止Case穿透
        String name = "小帝";//输出结果:匹配

        switch (name){
            case "小帝":
                System.out.println("匹配");
                break;//这里如果不加break ,输出结果就会把下面的两个结果一并输出,造成case穿透
            case "大帝":
                System.out.println("匹配");
            default:
                System.out.println("不匹配");
        }
        System.out.println("===============");
 //continue在循环语句中的使用方法
        int b = 0;
        while (b<100){
            b++;
            if (b%10==0){ //当b能被10整除时,
                System.out.println(); //输出换行
                continue; //且跳过,
                          //这里的continue会让程序只要符合条件的就立马跳过,会一直循环,但是碰到他,就跳过。
            }
            System.out.print(b); //所以最终输出的结果就是1-100中,1-9到90-99,每个10,都被跳过了
        }
        System.out.println("===============");
    }
    //break: 在任何循环语句中的主体部分,均可用break控制循环的流程,
    //        break用于强制退出循环,不执行循环中剩余的语句,
    //        break语句也在Switch语句中使用,主要用于防止Case穿透
    //continue: 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断,
}

 

 

5.2、带标签的continue

package JavaBase.liuchengkongzhi;

public class break_continue_label_goto_01 {
    public static void main(String[] args) {
        //带标签的continue  label用法之goto

//打印101-150之间所有的质数
        //质数是指在大于1的自然数中,除了1和他本身以外,不能再有其他任何因数的自然数

        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; //通过 continue返回到标签的位置
                }
            }
            System.out.print(i+"\t");
        }
    }
}

 

 

posted @ 2024-04-15 17:59  xiaodi888  阅读(12)  评论(0编辑  收藏  举报