• java数组


    Scanner类:

    从键盘获取不同类型的变量,就需要使用Scanner类

    具体实现步骤:

    1.导包:import java.util.Scanner;

    2.Scanner的实例化:Scanner xx = new Scanner(system.in);

    3.调用Scanner类的相关方法(String类型是:next()。。。其他xx类型都是nextxx(),没有char类型,因为被String代替了),来获取指定类型的变量。

    注意:

    根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求类型不匹配时,会报异常:InputMisMatchException导致程序终止。 

    关于循环分支判断语句:

    关于switch-case结构:

    1.根据switch表达式中的值,以此匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句之后,则依然继续向下执行其他case结构中的执行语句,知道遇到break关键字或此机构末尾结束为止。

    2.break。可以使用在swich-case结构中,表示一旦执行到此关键字,就跳出swith-case结构

    3.switch结构中的表达式,只能如下的6中数据类型之一:byte、short、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)。

    4.break关键字是可选的

    5.case之后只能声明常量,不能声明范围。

    6.default:相当于if-else结构中的else,default结构是可选的,而且位置灵活。

    说明:

    一.凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。

    二.写分支结构时,当发现既可以使用swith-case,又可以使用if-else时,优先使用switch-case,因为它的执行效率稍高一点。

    对于循环结构的说明:

    1.不在循环条件部分限制次数的结构:for(;;)或while(true)

    2.结束循环有几种方式?

      方式一:循环条件部分返回false

      方式二:在循环体中,执行break

    3.嵌套循环:

      需要注意点:

        一、内层循环结构遍历一遍,只相当于外层循环循环体执行了一次。

        二、假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m*n次。

        三、外层循环控制行数,内层控制列数

    关于优化方面,举个例子:

        boolean iflag = true;
    for (int i = 2; i < 100000; i++) {

    for (int j = 2; j <= Math.sqrt(i); j++) {//优化二:减少循环范围
    if (i % j == 0) {
    iflag = false;
    break;//优化一:被除尽了,一定不是质数了,就跳出不判断后面的j了。
    }

    }
    if (iflag == true) {
    System.out.println(i);//优化三:打印很耗时,去掉收益很高
    }
    iflag = true;
    }
    }

    注意:如果不加上这些优化,效率天差地别。

    关于循环的两个关键字说明:

    continue和break的作用都是结束循环,但是不同的是:

    contiune是结束当次循环,整体循环继续。

    break是结束当前循环,直接跳出整体循环。

    另外continue还有跳转用法,在一个语句前面设置一个标签xxx,然后使用continue xxx;跳转到xxx语句所在位置。

    所以上述的那个例子,也可以把i%j == 0的那个判断内部换成continue xxx;xxx在第一层for循环位置。

    数组的概述:

    数组(Array),是多个相同类型数据按一定的顺序排列的集合,并使用一个名字命名,通过编号的方式对这些数据进行统一管理。

    数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

    创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。

    数组的长度一旦确定,就不能更改。

    通过下标或索引的方式调用指定位置的元素,速度很快。

    数组的分类:

    按照维度:一维数组、二维数组、三维数组.....

    按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)。

    一维数组的使用:

    一、数组的初始化和声明:

        1.静态初始化:数组的初始化和数组元素的赋值操作同时进行。

        如:int 【】xxx = new int【】{1,2,3,4};

        2.动态初始化:数组的初始化和数组元素的赋值操作分开进行。

        如:String 【】xxx = new String【5】;

    二、如何调用数组的指定位置的元素:

    通过下标(角标、索引)的方式调用。数组的索引是从0开始到数组长度-1结束。

    如:xxx【0】

    三、如何获得数组的长度:

    属性:length,如:xxx.length获取数组长度

    四、数组元素的默认初始化值:

    ---数组元素是整型:初始化值都是0,不管是byte、short、int、long。

    ---数组元素是浮点型:初始化值都是0.0,不管是float还是double

    ---数组元素是char型:0或者‘u0000’,而非‘0’,但是它遍历后输出出来却是类似于空格的效果,不过数值确实等于0。

    ---数组元素是boolean型:初始值是false。

    ---数组元素时引用数据类型:初始值是null

    五、数组的内存解析:

    先建立起一个内存结构的简单印象,如下图:

    一维数组的内存过程图:

    需要说明的是,图中的刘德华和张学友其实不是放在0x12ab地址中的,这个问题以后再讨论,其实他们是放在常量池里面的。

    二维数组的使用:

    对于二维数组的理解,可以看成是一维数组array1又作为另一个一维数组array2的元素存在。其实,从数组底层的运行机制来看,并没有多维数组,只不过是数组中的元素为数组,嵌套叠成的。

    一、数组的初始化和声明:

        1.静态初始化:

    int [ ] [ ] xxx = new int [ ][ ]{ {1},{1,2},{1,2,3}} 

        2.动态初始化:

    String [ ][ ] xxx = new int [2][3];

    小贴士:通过类型推断还可以这么写:

    String [ ][ ]xxx ={ {1},{1,2},{1,2,3}} 省略new int [ ][ ],此方法也适用与一维数组。

    二、如何调用数组的指定位置的元素:

    xxx【第x个数组的索引】【x数组中第x个元素】

    三、如何获得数组的长度:

    xxx.length 长度是有多少个数组元素,而不是有多少个元素。

    xxx[0].length 这个表示第一个数组元素,它的长度。

    四、如何遍历二维数组:

    for(int i = 0;i < xxx.length;i++){

      for(int j = 0;j < xxx[i].length;j++){

         System.out.print(xxx[i][j]);

    }}

    五、数组元素的默认初始化值:

    通过例子来看看:

    int [ ] [ ] xxx = new int[4][3];

    System.out.print(xxx[0]);输出的是一个地址值

    System.out.print(xxx[0][0]);输出为0

    由此可见,第一次输出的是外层元素的地址值,它就是数组的地址。

         第二次输出就是一维数组一样理解。

    二位数组的内存解析:

    如图所示:

  • 相关阅读:
    HIVE中内连接和左半连接不一致问题
    hive 中的Sort By、 Order By、Cluster By、Distribute By 区别
    基于MapReduce的矩阵乘法运算
    基于MapReduce的关系代数运算(2)
    基于MapReduce的关系代数运算(1)
    帖子爬取
    tomcat------https单向认证和双向认证
    struts2配置文件struts.xml的简介
    2014,事情只有一件!
    MYSQLi数据访问查询数据
  • 原文地址:https://www.cnblogs.com/liuhuan425/p/10743490.html
Copyright © 2020-2023  润新知