zoukankan      html  css  js  c++  java
  • 03、选择、循环结构


    前言

          去年四月份大一下半学期正式开始学习Java,一路从java基础、数据库、jdbc、javaweb、ssm以及Springboot,其中也学习了一段时间数据结构。

          在javaweb期间做了图书商城项目、ssm阶段做了权限管理项目,springboot学了之后手痒去b站看视频做了个个人博客项目(已部署到服务器,正在备案中)。期间也不断进行做笔记,总结,但是越学到后面越感觉有点虚,觉得自己基础还有欠缺。

          之后一段时间我会重新回顾java基础、学习一些设计模式,学习多线程并发之类,以及接触一些jvm的相关知识,越学到后面越会感觉到基础的重要性,之后也会以博客形式输出学习的内容。

          现在整理的java知识基础点是在之前学习尚硅谷java课程的笔记基础之上加工汇总,部分图片会引用尚硅谷或网络上搜集或自己画,在重新回顾的过程中也在不断进行查漏补缺,尽可能将之前困惑的点都解决,让自己更上一层楼吧。

          博客目录索引博客目录索引(持续更新)



    一、Scanner使用

    Scanner是java.util下的一个工具类

    通过Scanner我们可以让程序接收到我们输入的值,实例化方式为:Scanner scanner = new Scanner(System.in);

    可以通过这个Scanner实例调用方法来从键盘中获取指定类型的数据,获取基本类型如下:

    • int:scanner.nextInt()
    • String:scanner.next()
    • boolean:scanner.nextBoolean()
    • char:暂时没有指定方法获取到char类型,不过可以现获取到String类型,再使用其charAt(pos)获取pos位置的单个字符。

    注意:当输入不匹配时,会抛出InputMismatchException异常,程序会直接终止!!!



    二、选择结构

    if

    if else 可以嵌套进行。

    语法格式

    //单if结构
    if(boolean){
        ...
    }else{
        ...
    }
    
    //嵌套if
    if(boolean){
        ...
    }else if(boolean){
        ...
    }else if(boolean){
        ...
    }
    

    执行顺序由上至下,判断条件必须是boolean类型,在Java中int与boolean类型并不相同。



    switch

    根据表达式来进行由上至下执行选择

    语法格式

    switch(表达式)
    {
    	case 常量1:
     		break;
    	case 常量2:
     		break;
     	default:
            break;
    }
    
    • 表达式charbyteshortintCharacterByte ShortIntegerenum(枚举类型,JDK5.0新增), String(JDK7.0新增)

    • case之后:只能声明单个常量,不能声明范围。

    • default:若是没有符合条件的case话,会执行default下内容,若是符合条件的case就不会执行default下内容了。

    • break:若是某个case符合表达式的话,如果该case下没有break会继续向下面case执行(无论这个case是否成立);若是有执行完符合条件的case就结束switch。

      • switch (1)
        {
            case 1:
                System.out.println(1);
            case 2:
                System.out.println(2);
                break;
            default:
                System.out.println("default");
                break;
        }
        //结果为下面:
        1
        2
        


    总结

    1. 凡是可以使用switch-case结构的情况都可以使用if-else,而能够使用if-else情况并不一定能够使用switch。
    2. 当写分支结构时,若是取不同情况较少并且可以使用if与switch结构时,优先选择switch。(switch-case结构执行效率稍高一些)
    3. if结构更加简便易用,根据情况去进行选择。


    三、循环结构

    包含while、do-while、普通for循环、foreach(增强for循环,JDK5.0)

    知道循环次数的使用for循环而不是while循环。

    while语法

    while(布尔值){
        ....
    }
    

    do-while语法

    do{
        ...
    }while(布尔值)
    

    for循环

    for(赋初值;判断条件;赋值加减){ 
        执行语句 
    }
    

    foreach:很容易逐个运行数组或其他集合(collection)的元素

    for(元素类型type  元素变量value : 遍历对象obj) { 
    }
    

    说明:这里只是简单列出语法,不做过多描述。



    四、break、continue与label

    基本介绍

    break:直接结束最近的循环。

    continue:直接结束本次循环,若是continue下有内容直接跳过,开始下一次循环。

    label:在指定部分前添加label表示为标记,并且可以使用break与continue搭配label标签进行快速跳出,如c++的goto有点像。


    实际案例:求出1-10000中的质数个数

    质数:一个数的因数只有一和它本身,这样的数叫做质数

    方式一:普通做法

    boolean flag;
    int count = 0;
    for (int i = 2 ;i< 10000;i++){
        flag = true;
        for(int j = 2;j<i;j++){  //遍历2-i中的所有情况,看是否能够进行约分
            if(i%j == 0)
                flag = false;
        }
        if(flag && i!=1)
            count++;
    }
    System.out.println(count);//1229
    

    方式二:使用break提前结果

    int j = 0;
    int count = 0;
    boolean flag;
    for (int i = 2 ;i<= 10000;i++){
        flag = true;
        for(j = 2;j<=Math.sqrt(i);j++){ //优化一:范围缩小根号2
            if(i%j == 0){
                flag = false;
                break;//优化二:直接结束循环
            }
        }
        if(flag)
            count++;
    }
    System.out.println(count);//1229
    

    方式三:continue配置label直接结束最外层循环

    int count = 0;
    int j;
    label:for (int i = 2 ;i<= 10000;i++){
        for(j = 2;j<=Math.sqrt(i);j++){
            if(i%j == 0)
                continue label;
        }
        count++;
    }
    System.out.println(count);//1229
    

    说明:直接不需要布尔值来进行判断,当只要有约分情况直接continue到指定label标签,原本continue只能结束本次最近的循环,在这里可以直接跳到最外层循环。


  • 相关阅读:
    LeetCode刷题记录2020-10-07之动态规划入门!!!线性DP(二)
    LeetCode刷题记录2020-10-06之动态规划入门!!!线性DP
    LeetCode刷题记录2020-10-05之Double Pointer!!!
    Python核心编程之属性查找过程!
    Python核心编程之元类!
    Python配置文件的导入方式和源码分析!
    大数据架构入门之二:埋点数据流程
    day46 css第二part
    day44天 HTTP协议 和前端html协议
    day39 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化
  • 原文地址:https://www.cnblogs.com/changluya/p/14422968.html
Copyright © 2011-2022 走看看