ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java_SE 流程控制

2021-02-14 23:35:13  阅读:127  来源: 互联网

标签:语句 Java Scanner 流程 System break 循环 输入 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,Scanner,流程,System,break,循环,输入,SE
来源: https://www.cnblogs.com/studyman/p/14402976.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有