java流程控制

JAVA流程监控如何做_JAVA流程监控如何做

用户交互scanner

  • 之前学的基本语法中还并没有实现程序和人的交互,java提供了这样一个交互类,我们可以获取用户的输入。 java.util.Scanner(工具包)是java5的新特性。即可以通过Scanner类类获取用户输入。
  • 基本语法
Scanner s = new Scanner (System.in);
//System out输出,System in输入
  • 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
  • 如果输入的命令为next,则输出的结果为下一个字符,而输入的命令为nextLine时,输出的结果为下一个字符串,即下一句话,下一行
  • 输入next
package com.shusheng01.scanner;


import java.util.Scanner;

public class Demo01 {

    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据

        Scanner scanner = new Scanner(System.in);

        System.out.println("使用next方式接收");

        //判断用户有没有输入字符串
        if (scanner.hasNext()==true){
            //使用next方式接收
            String str =scanner.next();//程序会等待用户输入
            System.out.println("输入的内容为:"+str);
        }

        //凡是属于IO流的类如果不关闭,会一直占用资源,要养成好习惯用完关掉
        scanner.close();//关闭scanner

/*
使用next方式接收
hello world(输入的字符串)
输入的内容为:hello(输出以后的字符)

Process finished with exit code 0
*/

    }

}
  • 输入nextLine
package com.shusheng01.scanner;

import java.util.Scanner;

public class Demo02 {
    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);

       /*
       使用nextLine方式接收
       hello world
       输出的内容为:hello world
       Process finished with exit code 0
        */
        }
        scanner.close();
        }
    }
  • next和nextLine的区别

next:

  1. 一定要读取到有效字符后才可以结束输入,否则程序不停止,且要在结尾加 scanner.close();
  2. 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
  4. next()不能得到带有空格的字符串

nextLine:

  1. 以Enter(回车)为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
  2. 可以获得空白
  • 接收数据并且用if语句判断
package com.shusheng01.scanner;

import java.util.Scanner;

public class Demo04 {
    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();
        /*
        请输入整数:
        30
        整数数据:30
        请输入小数:
        35
        小数数据:35.0

        Process finished with exit code 0

         */



    }
}

求和及平均数:

package com.shusheng01.scanner;

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        System.out.println("请输入数据");
        //我们要输入多个数字,并且求其总和与平均数,每输入一个数字
        //用回车键确认,通过输入非数字来结束输入并且输出执行结果
        Scanner scanner =new Scanner(System.in);

        //求和
        double sum = 0;
        //计算输入了多少个数字
        int m = 0;
        //通过循环判断是否还有输入,并且在里面对每一次进行求和统计
        while (scanner.hasNextDouble()){
            double x = scanner.nextDouble();
           //输入一个数x
           m = m+1;
           sum = sum +x;
           System.out.println("你输出了第"+m+"个数据,当前结果为"+sum);

        }
        System.out.println("共输入"+m+"个数据");
        System.out.println(m+"个数的和为"+sum);
        System.out.println(m+"个数的平均数为"+(sum/m));

        scanner.close();


/*
        请输入数据
10
你输出了第1个数据,当前结果为10.0
20
你输出了第2个数据,当前结果为30.0
30
你输出了第3个数据,当前结果为60.0
40
你输出了第4个数据,当前结果为100.0
55
你输出了第5个数据,当前结果为155.0
60
你输出了第6个数据,当前结果为215.0
70
你输出了第7个数据,当前结果为285.0
60
你输出了第8个数据,当前结果为345.0
8888
你输出了第9个数据,当前结果为9233.0
x
共输入9个数据
9个数的和为9233.0
9个数的平均数为1025.888888888889

Process finished with exit code 0
*/
    }
}

顺序结构

  • java的基本机构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
  • 顺序结构是最简单的算法结构
  • 语句与语句之间,框与框之间是按从上到下的顺序进行的,他是由若干个一次执行的处理步骤组成的,他是任何一个算法都离不开的一直基本算法结构。

JAVA流程监控如何做_布尔表达式_02

选择结构

if单选择结构

if双选择结构

if多选择结构

嵌套的if结构

switch多选择结构

if单选择结构

很多时候判断一个东西是否可行,然后再去执行,这样一个过程在程序中用if语句来表示

if(布尔表达式){
  //如果布尔表达式为true将执行的语句
}

JAVA流程监控如何做_JAVA流程监控如何做_03

package com.shusheng01.struct;

import java.util.Scanner;

public class ifDemo01 {
    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);
        }
        System.out.println("END");


        scanner.close();


    }
}

if双选择结构

即:A计划行不通,则进行B计划

if(布尔表达式){
  //如果布尔表达式的值为true
}else{
  //如果布尔表达式的值为false
}

JAVA流程监控如何做_System_04

package com.shusheng01.struct;

import java.util.Scanner;

public class IfDemo02 {
    public static void main(String[] args) {
        //考试分数大于60分及格,小于60分不及格
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩");
        int score = scanner.nextInt();
        if (score>60){
            System.out.println("及格");
        }else {
            System.out.println("不及格");
        }


/*
        请输入成绩
78
及格

Process finished with exit code 0
*/
    }


}

if多选择结构

当问题有多个选项的时候使用多选择结构

if(布尔表达式1){  //如果布尔表达式1的值为true执行代码}else if(布尔表达式2){  //如果布尔表达式2的值为true执行代码}else if(布尔表达式3){  //布尔表达式3的值为true执行代码}else{  //如果以上布尔表达式的值都不为true执行代码}

JAVA流程监控如何做_System_05

package com.shusheng01.struct;

import java.util.Scanner;

public class IfDemo03 {
    public static void main(String[] args) {
        /*考试分数大于60及格
        考试分数小于60不及格
        考试分数大于80优秀
        考试分数小于40差劲
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩");
        int score = scanner.nextInt();

        if (score>80){
            System.out.println("优秀");
        }else if (score>60){
            System.out.println("及格");
        }else if (score==60){
            System.out.println("不及格");
        }else if (score>=0 && score<=40){
            System.out.println("叫家长");
        }

        scanner.close();


/*
请输入成绩
33
叫家长

Process finished with exit code 0
*/
    }
}

嵌套的if结构

使用嵌套的if语句是合法的,也就是你可以在另一个if或者else语句中使用if或者else的if语句

if(布尔表达式1){
	//如果布尔表达式1的值为true,则执行此代码
	if(布尔表达式2){
	//如果布尔表达式2的值为true,则执行此代码
	}
}
package com.shusheng01.struct;

import java.util.Scanner;

public class IfDemo04 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入成绩");
        int score = scanner.nextInt();

        if (score>=30){
            System.out.println("还给我");
            
            
        }else if (score<30 && score>=20){
            if (score<30 && score>=25)
                System.out.println("是是是");
            System.out.println("正确");
            
            
        }else if (score<20&&score>=10){
            System.out.println("是的");
        }else if (score<10&&score>=5){
            System.out.println(score);
        }

        scanner.close();
    }
}

如上代码,if (score<30 && score>=25), System.out.println("是是是");则是嵌套进去的代码

switch多选择结构

switch case 语句判断一个变量与一系列中的某个值是否相等,每个值称为一个分支。

switch(expression){
	case value:
	//语句
	break;//可选
	case value:
	//语句
	break;//可选
	//你可以有任意数量的case语句
}
  • switch语句中的变量类型可以是

1.byte、short、int、char

package com.shusheng01.struct;

import java.util.Scanner;

public class SwitchDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//case 穿透  switch匹配一个具体的值
        char grade = 'g';

        switch (grade){
            case 'A':
                System.out.println("优秀");
                break;//如果不写break,则语句都会输出(称为case穿透现象)
            case 'C':
                System.out.println("良好");
                break;
            case 'D':
                System.out.println("789");
                break;
            case 'E':
                System.out.println("456");
                break;
            case 'F':
                System.out.println("123");
                break;
            default://如果输入了A_F之外的其他字母,会进行default语句
                System.out.println("未知等级");
                break;
//未知等级
//Process finished with exit code 0
        }
    }
}

2.从Java SE 7开始switch支持字符串String类型

package com.shusheng01.struct;

public class SwitchDemo02 {
    public static void main(String[] args) {
        //表达式结果可以是字符串
        //字符的本质还是数字

        //反编译 java==>class(字节码文件)==>反编译(IDEA工具),可以查看字符的数字编码

        String name = "是是";
        switch (name){
            case "书生":
                System.out.println("书生");
                break;
            case "是是":
                System.out.println("的");
                break;
            default:
                System.out.println("?");
        }
    }
}

3.同时case标签必须为字符串常量或字面量

循环结构

while 循环

while(布尔表达式){
	//循环内容
}

只要布尔表达式为true,循环就会一直执行下去,我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环,少部分情况需要循环一直执行(比如服务器的请求响应监听等)。循环条件一直为true就会造成无限循环(死循环),我们正常的业务编程中应该尽量避免死循环,会影响程序性能造成程序卡死崩溃。

//循环停止下来的情况
package com.shusheng01.struct;

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

        //输出1--100

        int i = 0;
        while (i<100){
            i = i + 1;//或者i++;
            System.out.println(i);
        }
    }
}
package com.shusheng01.struct;
//死循环,永远停不下来
public class WhileDemo02 {
    public static void main(String[] args) {
        String A = "实打实";
        String B = "实打实";
        while (true){//有了true,代表此表达式永远都是正确的
        String C =A+B;
            System.out.println(C);
        }

    }
}
package com.shusheng01.struct;
//1+2+3+.....+100,计算题
public class WhileDemo03 {
    public static void main(String[] args) {
        int a = 0;
        int sum = 0;

        while (a<=100) {
            sum = sum + a;
            a++;
        }
         System.out.println(sum);
    }
}
//输出5050

do...while循环

  • 对于while语句而言,如果不满足条件,则不能进入循环。但是有时候我们需要即使不满足条件,也要至少执行一次。
  • do...while循环和while循环相似,不同的是,do...while循环至少会执行一次。
  • 二者的区别,while先判断后执行,do...while先执行一次然后做出判断,do...while总是保证循环体至少会被执行一次,这是他们的主要差别
do{
		//代码语句
}while(布尔表达式)
package com.shusheng01.struct;

public class DoWhileDemo01 {
    public static void main(String[] args) {
        int a = 0;
        int sum = 0;
        do {
            sum = sum+a;
            a++;
        }while (a<=100);//while在{}之外,{}内的程序先执行了一次
        System.out.println(sum);
    }
}
package com.shusheng01.struct;
//while与do...while的区别
public class DoWhileDemo02 {
    public static void main(String[] args) {
        int a = 0;
        while(a<0){
            System.out.println(a);
            a++;
        }
        System.out.println("==================");

        do {
            System.out.println(a);
            a++;
        }while (a<0);
    }
}
/*
while语句中,inta=0;与a<0;二者冲突且不成立,所以不会输出
==================
0
Process finished with exit code 0
 */

for循环(很重要)

(Java5引入的一种主要用于数组的增强型for循环)

  • 虽然所有的循环结构都可以用while或者do...while表示,但java提供的另一种for循环会使一些循环结构变得更加简单。
  • for循环语句是支持迭代的一种通用结构,是最有效,最灵活的循环结构。for循环执行的次数是在执行前就确定的。
for(初始化;布尔表达式,更新){
	//代码语句
}
package com.shusheng01.struct;

public class ForDemo01 {
    public static void main(String[] args) {
        int a = 0;//初始化条件
        while (a<100){//条件判断
            System.out.println(a);//循环体
            a++;//迭代
        }
        System.out.println("while循环结束!");
        
        for (int b = 1;b <= 100;b++){//用分号隔开的即初始化条件;循环体,迭代
            System.out.println(b);
        }
        System.out.println("for循环结束!");
        
        for (int i = 0; i <= 100; i++) {//快捷键100.for
            System.out.println(i);
        }
        System.out.println("for循环结束!");
    }
}
/*最先执行初始化的步骤,可以声明一种类型,但可以初始化一个或者多个循环控制变量,也可以是空语句。然后
检测布尔表达式的值,如果为true,循环体被执行,如果
为false,循环终止,开始执行循环提后面的语句。
执行一次循环后更新循环控制变量(迭代因子控制循环变量的增减)。
再次检测布尔表达式,循环执行上面的过程。*/

oddSum奇数和

evenSum偶数和

package com.shusheng01.struct;

public class ForDemo02 {
    public static void main(String[] args) {
        //练习题1:计算0~100之间的奇数和偶数的和
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 0; i < 100; i++) {
            if (i%2!=0){//模运算,i/2后余数不等于0,说明是个奇数
                oddSum+=i;;//oddSum=oddSum+i;
            }else {
                evenSum+=i;
            }
        }
        System.out.println("奇数的和:"+oddSum);
        System.out.println("偶数的和:"+evenSum);
    }
}
package com.shusheng01.struct;

public class ForDemo03 {
    public static void main(String[] args) {
        //用while或者for循环输出1~1000之间能被5整除的数,并且每行输出3个
        for (int i = 0; i <= 1000; i++) {
            if (i % 5 == 0) {//第一个结果
                System.out.print(i + "\t");// \t每个结果用空格隔开
            }
            if (i % (5 * 3) == 0) {//第三个结果
               System.out.println();//输出空的字符串可以代表换行
                // System.out.println("\n");//  \n转义字符换行
            }
            //println输出完会换行
            //print输出完不会换行
        }
        System.out.println("===========================");
        int a = 0;
        while (a <= 1000) {
            a = a + 1;
            if (a % 5 == 0) {
                System.out.print(a+"\t");//print输出后不会换行
            }
            if (a % (5 * 3) == 0) {
                System.out.println();
            }


        }
    }
}

九九乘法表

package com.shusheng01.struct;
//做一个九九乘法表
public class ForDemo04 {
    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*1=1	
2*1=2	2*2=4	
3*1=3	3*2=6	3*3=9	
4*1=4	4*2=8	4*3=12	4*4=16	
5*1=5	5*2=10	5*3=15	5*4=20	5*5=25	
6*1=6	6*2=12	6*3=18	6*4=24	6*5=30	6*6=36	
7*1=7	7*2=14	7*3=21	7*4=28	7*5=35	7*6=42	7*7=49	
8*1=8	8*2=16	8*3=24	8*4=32	8*5=40	8*6=48	8*7=56	8*8=64	
9*1=9	9*2=18	9*3=27	9*4=36	9*5=45	9*6=54	9*7=63	9*8=72	9*9=81	
*/

增强for循环

  • JAVA5引入了一种主要用于数组或集合的增强型for循环
for(声明语句:表达式){
		//代码句子
}
  • 声明语句:生命新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
  • 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
package com.shusheng01.struct;

public class ForDemo05 {
    public static void main(String[] args) {
        int []numbers = {10,20,30,40};//定义一个数组

        for (int i = 0; i < 4; i++) {
            System.out.println(numbers[i]);
        }
        System.out.println("------------------------------");
        //相对于上面来说,下面的公式简化了很多
        //便历数组的元素
        for (int x:numbers){
            System.out.println(x);
        }
    }
}

break与continue

  • break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
package com.shusheng01.struct;

public class BreakDemo01 {
    public static void main(String[] args) {
    int i = 0;
    while (i<100){
        i++;
        System.out.println(i);
        if (i==30) {
            break;//i自增到100,但是加了前提条件当i=30时,跳出循环,但未终止程序
        }
    }
    }
}
  • continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
package com.shusheng01.struct;

public class ContinueDemo01 {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println("亲");
                continue;
            }
            System.out.println(i);
        }
    }
}//在输出时continue会在10的倍数时输出”亲“
  • goto关键字:
  • goto关键字很早就在程序设计语言中出现,尽管goto仍是java的一个保留字,但并未在语言中得到正式使用;java没有goto,然而,在break和continue这两个关键字的身上,我们仍然能看到一些goto的影子——>带标签的break和continue。
  • “标签”是指后面跟一个冒号的关键词;如 label:
  • 对Java来说,唯一用到标签的地方实在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常指中断当前循环,但若随同标签使用,他们就会中断到存在标签的地方。
package com.shusheng01.struct;

public class LebelDemo {
    public static void main(String[] args) {
        //打印101~150之间的质数
        //质数,只能被1和其本身整除
        //不建议使用
        int count = 0;
        outer:for (int i = 101; i < 150; i++) {
            for (int j = 0; j < i/2; j++) {
                if (i%j==0);{
                    continue outer;;
                }
            }
        }
        System.out.print();
    }

}