Java_SE 流程控制

Java流程控制学习

学习目录

1.用户交互Scanner

2.顺序结构

3.选择结构

4.循环结构

5.break & continue

6.练习

Scanner对象

1.java.util(util=工具包).Scanner是java5的新特征,我们可以通过Scanner类来获取用户的输入;

2.基本语法

Scanner s = new Scanner(System.in);

3.通过Scanner类的next()与nextLine()方法获取输入的字符串,
在读取前,我们一般需要使用 hasNext() 与 hsaNextLine() 判断是否还有输入的数据;

4.基本使用方法

//创建一个扫描器对象,用于接收键盘数据
Scanner scanner= new Scanner(System.in);

//判断有没有字符串数据输入;
if(scanner.hasNext()){
    //使用Next()方法接收
    String str = scanner.next();
    System.out.println("输入的内容为:"+str);
}
//使用完Scanner之后,进行Scanner关闭,进行资源回收;
scanner.close();
//------------
//nextLine()
Scanner scanner= new Scanner(System.in);

//判断有没有字符串数据输入;
if(scanner.hasNext()){
    //使用NextLine()方法接收
    String str = scanner.nextLine();
    System.out.println("输入的内容为:"+str);
}
//使用完Scanner之后,进行Scanner关闭,进行资源回收;
scanner.close();
//------------
注意1:属于IO流的类,如果创建之后,不进行关闭,那么会一直占用资源;
IO流:可以与用户进行交互的类统称为IO流;
//------------
next()
1.一定要读取到有效字符后才可以结束输入;
2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉;
3.只有输入有效字符后,才将其后面输入的空白作为分隔符或者结束符;
4.next() 不能得到带有空格的字符串;
//------------
nextLine();//常用
1.以Enter为结束符,也就是说 nextLine()方法返回的是,输入回车之前的所有字符;
2.可以获得空白;
//------------
hasNextInt();//判断是否输入整数;
nextInt();//获取输入整数;
//------------
hasNextFloat();//判断是否输入小数数据;
nextFloat();//获取输入小数数据;
//------------
1.可以使用Ctrl+鼠标左键在IDEA中点击Scanner类,进入查看其中各种方法;
可以通过侧边栏左边的结构进行查看其中Scanner类的各种方法;

作业:
/*可以输入多个数字,并求其总和与平均数,每输入一个数字,使用回车进行确认,通过输入非数字来结束输入并输出执行结果;*/
//随机创建一个类:
public class Demo01{
    //创建main()方法
    public static void main(String[] args){
        //创建Scanner对象,使用System.in,说明进行的是输入操作;
        Scanner sc = new Scanner(System.in);
        //创建double型变量接收和值;
        double sum=0;
        //创建int型变量计次;
        int i=0;
        //提示输入数字;
        System.out.println("请输入数值"+(i+1)+":");
        //使用判断循环首while
        while(sc.hasNextDouble()){
		   //是否应创建一个if语句用以判断是否输入的是数值?
            //不用,使用hasNextDouble,就是理解的意思了.
            //若不使用看一下,不可以不使用循环,条件不成立;
            //创建用于接收键盘输入数字变量,类型double
            double num=sc.nextDouble();
            //计算和值;
            sum=sum+num;
            //计次
            i++;
            //提示输入数字;
            System.out.println("请输入数值"+(i+1)+":");
        }
        //循环结束后,和值确认,求平均数值
        //创建平均数变量.count?
        double count = sum/i;
        //输出相应计算结果;
        System.out.println("输入的个数有多少个:"+i);
        System.out.println("输入的数值和值为:"+sum);
        System.out.println("输入的数值平均数为:"+count);
        //关闭Scanner对象
        sc.close();
    }
}
//作业已完成;
scanner.equals("AAA"); equals方法.判断字符串是否相同;

基本结构

顺序结构(struct)

1.java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行下去;
2.顺序结构是/*最简单的算法结构*/
3.语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的;
	/*他是任何一个算法都离不开的一种基本算法结构*/

选择结构

1.if单选择结构
    很多时候,需要判断一个东西是否可行,那么就需要用到if语句.
    如:成绩是否及格;
2.if双选择结构
    一个事物,不是只有一种结果,成功了就怎么做,而失败了,又怎么做;那么就需要用到else语句
	如成绩:60分以上为及格,60分以下为不及格;
3.if多选择结构
    一个事物,不是只有两种结果,那么就需要用到else if + else 语句叠加使用;
	如成绩:100-90区间为A,90-80区间为B;80-60为C;60以下为D;
4.嵌套的if结构
    在判断的时候,如果需要确认其结果等于在一个范围,并逐步缩小甚至直接判断是否正确;
//	快速找到一个数在其规定范围的方法
//	取中判断思想,在100个数中查找,将其与50判断,若大于,则为50-100区间,否则为1-50区间
//	此操作一下减少一半范围,之后可以继续在想要的范围进行取中值判断,从而达到快速查找的效果;
	if(A<=50 && A>0){
		//前提条件,需要小于等于50且不为负数,但小于等于50之后,还需要分成两批;
        //50-30为A类,30-0为B类;
        //A是否小于50,是则进入此处,再次判断
        if(A<=50 && A >= 30){
            //判断A是否小于等于50,大于30;
            //进入这里,说明是符合条件的A类;
            System.out.println("A类数值:"+A);
        }//否则,则为B类数值;
        else{
            //因为已经小于50,在没有负数的情况下,只有0-30这一区间了;
            //所以相应皆为B类数值,也就不需要使用else if语句再次判断;
            System.out.println("B类数值:"+B);
        }
    }
//注意事项:
1.if语句至多有1个else语句.else语句应写在在所有的else if语句之后;
2.if语句可以有若干个else if语句,它们必须在else语句之前;
3.一旦其中一个if语句判断为true,则其他所有的else if 和 else语句皆将被跳过执行判断;
4.所有的流程控制语句,皆可以相互嵌套,而互不影响;
//-------------------
5.switch多选择结构
1.多选择结构还有一个实现方式就是switch case语句;
2.switch case语句用来匹配一个变量与一系列值中某个值是否相等,每个值称为一个分支;
3.switch语句中的变量类型可以是
byte.short.int或者char
4.从java SE7开始 switch支持字符串String类型了;
5.同时case标签必须为字符常量或字面量;
6.在switch语句中,可以创建多个case分支,但只能有一个默认default语句分支;
7.case分支语句块中,必须带有break(跳出循环)语句,不然会穿透执行;
基本语法:
switch (表达式){
    case (字符常量或字面量):
            break;
    case "String":
        break;
        default :
            //default,默认方法,不用进行判断.反正各种判断都没有,就会执行default方法;
            //default方法,可写,可不写;
            //在不写的情况下,必须保证case值可以匹配到相应的值,否则会发生case穿透;
}

循环结构

do...while	  //循环判断首
for循环		//计次循环首
1.在java5中引入了一种主要用于数组的增强型for循环;
/*-------------------------*/
while循环		//判断循环首
1.最基本的循环结构
2.只要布尔表达式为true,循环则会一直循环;
3./*我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环;*/
4.循环条件一直为true就会造成无限循环(死循环),我们正常的业务编程中应尽量避免死循环.会影响程序性能或者造成程序卡死崩溃;
思考:1+2+3..+100=?
	int sum=1;
	int	i=2;
    while(i<=100){
        sum=sum+i;
        i=i+1;
    }
/*-------------------------*/
do...while循环
1.对于while语句而言,如果不满足条件,咋不能进入循环.但有时候我们需要即使不满足条件,也至少执行一次;
2.do...while循环和while循环相似,不同的是,哪怕条件不满足,do...while也会执行至少一次;
3.while循环和do...while的区别
while循环是先判断,再执行,而do...while循环是先循环,再判断;
do...while总是保证循环体会被至少执行一次;这是他们的主要差别
/*-------------------------*/
for循环
1.虽然所有循环结构都可以使用while或者do...while表示,但java提供了另一种语句--for循环,
使一些循环结构变得更加简单;
2.for循环语句时支持迭代的一种通用结构,是最有效,最灵活的循环结构;
3.for循环执行的次数是在执行前就确定的;
练习1:计算0-100之间的奇数和偶数的和;
练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个;
练习3:打印九九乘法表;
练习1:
        //创建for循环体
        //创建一个变量来接收奇数的和;
        int num1=0;
        //创建一个变量来接收偶数的和;
        int num2=0;
        for (int i = 0; i <= 100; i++) {
            //判断是否为偶数
            if (i % 2 == 0) {
                //求余%2等于0的数,得到的是偶数;
                num2 = num2 + i;
            } else {
                //否则则为奇数;
                num1 = num1 + i;
            }
        }
        System.out.println("奇数之和:"+num1+" 偶数之和:"+num2);
//练习1完成
//------------------
       //练习2:
//好像只能创建一个数组,才能方便一些做这道题;
//并且需要使用arrayList;这个我好像不太懂用了;
//也可以使用三个变量用来保存;输出之后再进行覆盖,虽然很傻...
        int num1=0;
        int num2=0;
        int num3=0;
        int i1=0;
        for(int i=1;i<=1000;i++){
            if(i%5==0){
                i1++;
                //得到的皆为可以被5整除的数;
                //每行输出三个...
                //再创建一个计数变量...3次循环;
                if(i1%3==1){
                    num1=i;
                }else if(i1%3==2){
                    num2=i;
                }else if(i1%3==0){
                    num3=i;
                    //输出结果,不然等下就会漏掉了;
                    System.out.println("第一个:"+num1+" 第二个:"+num2+" 第三个:"+num3);
                }
            }
        }
    }
}
//勉强完成;练习2
练习2:重置
    for(int i=1;i<=1000;i++){
       if(i%5==0){
           	//输出不换行,显示满3个,之后再换行;
                System.out.print(i+"\t");
       }
        if(i%15==0){
            //换行方法1;
            System.out.println();
            //换行方法2;
            System.out.print("\n");
        }
    }
//------------------
练习3:
//九九乘法表一共九层;
//需要至少两个变量;循环好像需要嵌套,好弄一些;
        //没那么简单额;原来刚才写错了,第二个for循环的i1没整好;
        //现在可以是可以,但不美观;
        //勉勉强强,弄美观一点;现在勉强还行,加了逢9换行;
        //需要去掉一些重复的;//未完
        for(int i=1;i<=9;i++){
            for(int i1=1;i1<=9;i1++){
                //好像直接输出都可以了
                System.out.print(i+"*"+i1+"="+i*i1+" ");
                if(i1==9){
                    System.out.println();
                }
            }
        }
//好像完成了勉勉强强;练习3;
练习3:重置
    //按横行思考,每次内循环小于外循环,则每次减少输出一个;
    //由上而下
    //第一次,外1,内1	
    //第二次,外2,内2
    //第九次,外9,内9
    //由网友提供思路...
    //由列思考,不好思考,换成按行思考,好解决;
         for (int i = 1; i <= 9; i++) {
             //将内计次小于外计次即可删除重复
            for (int i1 = 1; i1 <= i; i1++) {
                //好像直接输出都可以了,加上\t,使其排列整齐;
                System.out.print(i + "*" + i1 + "=" + i * i1 + "\t");
            }
             //每次到外面就进行换行
            System.out.println();
        }
//------------------
//迭代:每次调用这个值的时候进行刷新;
A+=1;//迭代
i++;//迭代
//------------------
/*for循环*/
1.最先执行初始化步骤,可以声明一种类型,可以初始化一个或者多个循环控制变量;也可以是空语句;
2.然后检查boolean表达式;如果为true,进入循环体执行,如果为false,跳过循环体不执行,顺序执行for循环后面的语句;
3.执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减);
4.再次检查boolean表达式;重复上述步骤;
//------------------
增强型for循环
1.java5引入了一种主要用于数组或集合的增强型for循环.
2.java增强for循环语法格式如下:
for(声明语句 : 表达式){
    //代码句子
}
3.声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配;
其作用域限定在循环语句块,其值与此时数组元素的值相等;
4.表达式:表达式是要访问的数组名,或者是返回值为数组的方法;
代码示例:
int[] numbers={10,20,30,40};
for(int x:numbers){
    //numbers数组里面的值,皆赋值给了X;
    System.out.println(x);
}
//数组是一种数据结构;

break && continue

break:
1.break在任何循环语句的主题部分,均可用break控制循环的流程.
2.break用于/*强行退出循环*/,不执行循环中剩余的语句(break语句也在switch语句中使用);
//-----------
continue:
1.continue语句用在循环语句体中,用于/*终止某次循环过程*/,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定;
//-----------
关于goto关键字:
1.goto关键字很早就在程序设计语言中出现,尽管goto仍是java的一个保留字,但并未在语言中得到正式使用;
2.java没有goto,然而,在break和continue这两个关键字的身上,
我们仍然能看出一些goto的影子---带标签的break和continue
3."标签"是指后面跟一个冒号的标识符,例如: label:
4.对java来说唯一用到标签的地方实在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通畅只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方;
label代码示例:
//打印101-150之间所有的质数;
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因素的自然数;
//标签形式(不建议使用)
int count = 0;
outer:for(int i=101;i<150;i++){
    for(int j=2;j<i/2;j++){
        //将i/2得到1/2的i,将j自增到一半,求余,皆不可被整除;
        //则其为质数;
        if(i % j==0){
            //跳转回label标签处;
            continue outer;
        }
        System.out.println(i+" ");
    }
}
//-----------
流程控制练习:
//打印三角形5行
代码示例:
//将三角形拆分打印输出
//先打印左上角空格;再打印左半部分三角形;

for(int i=1;i<=5;i++){
    //由行思考,第一行输出5个空格;
    //第二行输出4个,第三行输出3;第五行输出1;
    //之后再在第一行输出一个*号;第二行输出2个,第五行输出5个;
    for(int j=5;j>=i;j--){
        System.out.print(" ");//不进行换行操作;交由后面
    }
	//已测试可以输出倒三角空格,则再建立一个for循环
    //在去第一行打印出5个空格时,换行之前;添加左半部分三角形;
    //第一次输出一个星号,这个是正序三角形;
    for(int j=1; j<=i ;j++){
        System.out.print("*");//不进行换行操作;交由后面
    }
	//好像再复制多一份上方for循环打印*号即可;
    //这样的话,最上方,还缺一点*号,不是太好看,不过也算三角形
    //中间的条件判断不是j<=i,而是j<i;这样就不会少一个星号了;
    //因为原来设置j<=i,j=1,i=1,那么第一行也会输出,就会造成第一行两个星号;
    //设置j<i,j=i的时候不执行,之后i++,j<i成立,执行循环体;
    for(int j=1; j<i ;j++){
        System.out.print("*");//不进行换行操作;交由后面
    }
    //换行
    System.out.println();

}

反编译

java--->class(字节码文件)--->(反编译)java(Idea);

将需要反编译的class文件,存放至java后缀文件包下,再从idea中打开即可;可进行查看源代码;

上一篇:Java SE :1.01-计算机基础知识


下一篇:Java_SE 数组详解