1.9 数组

1.9.1 数组的概念

概念:存储同一种数据类型的多个元素的容器。数组既可以存储基本数据类型,也可以存储引用数据类型

格式:

格式1:数据类型  []  数组名;

格式2:数据类型  数组名  [];

注意:这两种定义做完了,数组中是没有元素值的。如何对数组的元素进行初始化呢?

1.9.2 数组的初始化

数组初始化概述:Java中的数组必须先初始化,然后才能使用。所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

数组的初始化方式:

动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

示例:

class ArrayDemo3{public static void main(String [] args){//动态初始化:int[] arr = new int [3];//定义了一个数组长度为3的int类型数组。//静态初始化:int[] arr1 = new int[]{1,2,3};}
}

1.9.3数组的内存分配

int[] arr = new int[4];

内存分配图:

Java程序在运行时,需要在内存中分配空间。为了提高运算效率,又对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

内存的划分:

栈内存:用于存储局部变量,当变量所属的作用域一旦结束,所占空间会自动释放。

堆内存:数组和对象,通过new建立的实例都存放在堆内存中。每个实例都有地址值,实例中的变量都有默认初始化值,根据类型的不同而不同。整数类型是0,小数类型是0.0或0.0f,boolean类型是false,char类型是'\u0000',引用类型是null。

方法区:(面向对象部分详细讲解)。

本地方法区:(系统相关)。

寄存器:(CPU使用)。

1.9.4 数组操作的练习

练习1:数组遍历,就是依次输出数组的每一个元素

class ArrayTest{public static void main(String[] args){int[] arr = new int[]{11,22,33,44,55};System.out.print("[");for(int i = 0;i <= arr.length-1;i++){if(i == arr.length-1){System.out.print(arr[i]+"]");}else{System.out.print(arr[i]+",");}}}
}

运行结果:


    练习2:数组获取最值(获取数组中的最大值最小值)

思路:从数组中任意的找一个元素作为参照物(一般取第一个),默认它就是最大值。然后遍历其他的元素,依次获取和参照物进行比较,如果大就留下来,如果小,就离开。

class ArrayTest2{public static void main(String[] args){int[] arr = new int[]{1,34,55,66,23};int max = getMax(arr);System.out.println(max);}public static int getMax(int[] arr){int max = arr[0];for(int i = 1;i <= arr.length-1;i++){max = (max>arr[i])?max:arr[i];}return max;}
}

运行结果:


    练习3:数组元素逆序 (就是把元素对调)

方法1:

class ArrayTest3{public static void main(String[] args){//定义一个数组,并进行静态初始化。int[] arr = new int[]{11,22,33,44,55};System.out.print("逆序前:");printArray(arr);System.out.println();System.out.print("逆序后:");reverse(arr);printArray(arr);}//逆序数组方法1:public static void reverse(int[] arr){for(int i = 0;i < arr.length/2;i++){int temp = arr[i];arr[i] = arr[arr.length-1-i];arr[arr.length-1-i] = temp;}}//遍历数组public static void printArray(int[] arr){System.out.print("[");for(int i = 0;i <= arr.length-1;i++){if(i == arr.length-1){System.out.print(arr[i]+"]");}else{System.out.print(arr[i]+",");}}}
}

运行结果:

方法2:

class ArrayTest3{public static void main(String[] args){int[] arr = new int[]{11,22,33,44,55};printArray(arr);System.out.println();reverse(arr);printArray(arr);}public static void reverse(int[] arr){int start = 0;int end = arr.length-1;while(start<=end){int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}}//遍历数组public static void printArray(int[] arr){System.out.print("[");for(int i=0;i<=arr.length-1;i++){if(i==arr.length-1){System.out.print(arr[i]+"]");}else{System.out.print(arr[i]+", ");}}}
}

运行结果:

1.9.5 数组操作的几个小问题

示例1:ArrayIndexOutOfBoundsException:数组索引越界异常

class ArrayDemo6{public static void main(String [] args){int[] arr = new int[]{1,2,3};System.out.println(arr[3]);}
}

运行结果:


    示例2:

class ArrayDemo6{public static void main(String [] args){int[] arr = new int[]{1,2,3};arr = null;System.out.println(arr[0]);}
}

运行结果:

1.9.6 二维数组

格式1:数据类型[][] 数组名 = new 数据类型[m][n];

1、定义了名称为arr的二维数组。

2、二维数组中有m个一维数组。

3、每一个一维数组中有n个元素。

4、一维数组的名称分别为arr[0], arr[1], arr[2]……arr[m-1]。

5、给第一个一维数组第一个脚标位赋值为78写法是:arr[0][1] = 78;。

6、arr存储的是二维数组的初始地址,arr[0]、arr[1]、arr[2]存储的是一维数组的初始地址。

示例1:

class Array2Demo{public static void main(String[] args){int[][] arr = new int[3][2];//打印二维数组的初始地址System.out.println(arr);//印二位数组中的角标为0的一维数组的地址。System.out.println(arr[0]);//打印二维数组中的角标为0的一维数组的角标为0的元素System.out.println(arr[0][0]);}
}

运行结果:

格式2:数据类型[][] 数组名 = new 数据类型[m][];

二维数组中有m个一维数组,每个一维数组都是默认初始化值null,可以对这个m个一维数组分别进行初始化。

示例1:

class Array2Demo2 {public static void main(String[] args) {// 定义数组int[][] arr = new int[3][];System.out.println(arr);System.out.println(arr[0]);System.out.println(arr[0][0]);}
}

运行结果:

格式3:

数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...},{元素1,元素2...}};

int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};

定义一个名称为arr的二维数组,二维数组中的有三个一维数组,每一个一维数组中具体元素也都已初始化。
    第一个一维数组 arr[0] = {3,8,2};,第二个一维数组 arr[1] = {2,7};,第三个一维数组 arr[2] = {9,0,1,6};。
    第三个一维数组的长度表示方式:arr[2].length;。

示例1:

class Array2Demo3{public static void main(String[] args){int[][] arr = new int[][]{{3,8,2},{2},{9,4}};System.out.println(arr);System.out.println(arr[0]);System.out.println(arr[1]);System.out.println(arr[2]);System.out.println(arr[0][1]);System.out.println(arr[1][1]);System.out.println(arr[2][1]);}
}

运行结果:

二维数组的练习1:遍历二维数组

class Array2Test{public static void main(String[] args){int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};printArray2(arr);}public static void printArray2(int[][] arr){for(int i = 0;i < arr.length;i++){for(int j = 0;j < arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}}
}

运行结果:


    二维数组练习2:公司年销售额求和

/*
公司年销售额求和
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,44
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99*/
class Array2Test2{public static void main(String[] args){int [][] arr = new int[][]{{22,66,44},{77,33,88},{25,45,65},{11,66,99}};int sum = getSum(arr);System.out.println(sum);}public static int getSum(int[][] arr){int sum = 0;for(int x=0;x<arr.length;x++){for(int y=0;y<arr[x].length;y++){sum+=arr[x][y];}}return sum;}
}

运行结果:

思考题:

1、看程序,写结果:

/*思考题1:看程序写结果,然后分析为什么是这个样子的。并画图讲解。最后总结Java中参数传递规律。
*/
class ArgsDemo {public static void main(String[] args) {int a = 10;int b = 20;System.out.println("a:"+a+",b:"+b); //a:10,b:20change(a,b);System.out.println("a:"+a+",b:"+b); //a:??,b:??int[] arr = {1,2,3,4,5}; change(arr);System.out.println(arr[1]); //???}public static void change(int a,int b) { System.out.println("a:"+a+",b:"+b); //a:10,b:20a = b;  //a=20b = a + b; //b=40System.out.println("a:"+a+",b:"+b); //a:20,b:40}public static void change(int[] arr) { //arr={1,2,3,4,5};for(int x=0; x<arr.length; x++) {if(arr[x]%2==0) {arr[x]*=2;}}//int[] arr={1,4,3,8,5}}
}

运行结果:

为什么会出来这样的结果呢?在Java中,基本类型的形式参数的改变对实际参数没有影响。引用类型的形式参数的改变直接影响实际参数。

2、某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。

class JiaMiDemo{public static void main(String[] args){//定义一个不大于8位数据int number = 123456;//定义一个数组int[] arr = new int[8];//定义一个索引int index = 0;//把数据中每一位上的数据获取到后存储到数组中while(number>0){arr[index]=number%10;index++;number/=10;}//每位数字都加上5,再用和除以10的余数代替该数字for(int x = 0;x <index;x++){arr[x]+=5;arr[x]%=10;}//最后将第一位和最后一位数字交换int temp = arr[0];arr[0] = arr[index-1];arr[index-1] = arr[0];for(int x = 0;x<index;x++){System.out.print(arr[x]);}}
}

运行结果:


    将上面的代码改进一下:把数据改进为键盘录入,把代码改进为方法实现。

import java.util.Scanner;
class JiaMiDemo2{public static void main(String[] args){//键盘录入Scanner sc = new Scanner(System.in);System.out.println("请输入一个数据(小于8位):");int number = sc.nextInt();String result = jiaMi(number);System.out.println("加密后的结果:"+result);}/*写一个功能,把数据number实现加密。两个明确:返回值类型:String 做一个字符串的拼接参数列表:int number*/public static String jiaMi(int number){//定义数组int[] arr = new int[8];//定义索引int index = 0;//把number中的数据放到数组中while(number>0){arr[index]=number%10;index++;number/=10;}//把每个数据加5,对10取余数for(int x = 0;x < index;x++){arr[x]+=5;arr[x]%=10;}//交换第一位和最后一位的数据int temp = arr[0];arr[0] = arr[index-1];arr[index-1] = temp;//把数组的元素拼接成一个字符串返回//定义一个空内容字符串String s = "";for(int x = 0; x < index;x++){s+=arr[x];}return s;}
}       

运行结果:


    经验证,正确。

JavaSE----基础语法(数组)相关推荐

  1. JavaSE基础语法-笔记

    基础语法 注释 1.单单行注释 //Java单行注释 2.多行注释 /*多行注释..... */ 3.文档注释 /**文档注释 */ 标识符 1.关键字 abstract assert boolean ...

  2. 通俗易懂解决,JavaSE基础语法

    2.1 注释(annotation)(掌握) 注释:就是对代码的解释和说明.其目的是让人们能够更加轻松地了解代码.为代码添加注释,是十分必须要的,它不影响程序的编译和运行. Java中有单行注释.多行 ...

  3. java+数组+列举,Java基础-基础语法-数组

    数组简介: 数组(Array)是Java 语言中内置的一种基本数据存储结构,通俗的理解,就是一组数的集合,目的是用来一次存储多个数据. 数组是程序中实现很多算法的基础,可以在一定程度上简化代码的书写. ...

  4. 重生之我是javaの神之修炼练气功法之javase基础语法

    类的定义规则:每个单词的首字母大写,类名和文件名保持一致,见名知意. 标识符命名规范 1.只能以字母$下划线开头,以这三者和数字组成. 2.不能出现java关键字 3.不能出现中文 多行注释和文档注释 ...

  5. java运算符试题,编程语⾔⾯试题之新版javase基础语法篇之运算符

    简介:⾯试中 短路运算符 和 位运算考点:计算机基础运算知识 难度[** *] 你知道 运算符 &和&&.|和||的区别吗? ``` & 按位与操作 只有对应的两个⼆进 ...

  6. excel 基础语法 数组

    一维数组 dim arr(0 to 49) as string = dim arr(49) as string 都是从0开始,一共50个数组 dim arr(1 to 50) as string 这样 ...

  7. JavaSE基础语法中的修饰符

    访问修饰符: 公共的 public 受保护的 protected 默认的 私有的 private 非访问修饰符: 静态修饰符 static final: 修饰类时,该类不能被继承 修饰方法时,该方法不 ...

  8. 2021-09-16---JavaScript基础语法:数组(艹 )

  9. javase基础socket编程之局域网聊天,局域网文件共享

    2017年06月04日  23点25分 javase基础学完可以做什么,javase实现局域网聊天室 包含内容:基础语法,面向对象,多线程,IO流,GUI编程,网络编程(udp) 实现功能:局域网群聊 ...

  10. 第一篇博客---JavaSE基础部分回顾总结01概述、基础语法

    概述 常用DOS命令 .dir:列出当前目录下的文件及文件夹 md:创建目录 rd:删除目录 cd:进入指定目录 cd-:返回上一级目录 del:删除文件 del *.txt:删除所有txt类型文件( ...

最新文章

  1. AI一分钟 | ​被大家吐槽的网红机器人索菲亚开微博了;阿里人工智能团队iDST获得道路场景分割三项第一
  2. PNAS-2018-病原菌在植物免疫下的转录组
  3. vue 使用lib-flexable,px2rem 进行移动端适配 但是引入的第三方UI组件 vux 的样式缩小,解决方案...
  4. 腾讯开源之道:基于Apache之道的开源实践与探索
  5. android用户界面编程技巧——更新请求
  6. sql 命令未正确结束_渗透测试之SQL注入(1)
  7. maven-3.5.3通过eclipse打包问题(1)
  8. 数据库 char nchar varchar nvarchar 区别
  9. 高等代数——大学高等代数课程创新教材(丘维声)——3.1笔记+习题
  10. 卡巴斯基终生免费使用方法
  11. Visual C++ 2010创建Ribbon界面
  12. 使用虚拟光驱显示函数不正确的解决
  13. 一份完整详细的新媒体营销推广策划方案 (微信微博等)
  14. 入门级,Hadoop详情教程(一)
  15. https证书异常是什么意思?
  16. 用户下单时商品库存变化
  17. 华为HCIE RS笔记-20 OSPF的V-Link
  18. Linux开源存储全栈详解:从Ceph到容器存储
  19. 现在流行什么邮箱?职场解读:《你好,李焕英》为什么火了?
  20. 数据库系统概论第三单元基础知识(一)

热门文章

  1. vue 实现打字机效果
  2. linux局域网即时通讯,基于身份的Linux下局域网即时通讯系统的研究与实现
  3. No provisioned iOS devices are available with a compatible iOS version.
  4. miktex报错:the remote package repository is outdated
  5. 双系统后适合装matlab吗,安装双系统对电脑有什么影响|电脑装双系统有什么好处和坏处...
  6. java.lang.reflect.UndeclaredThrowableException
  7. Decorate 装饰器应用
  8. iOS 视频边下边播(缓存,预加载)
  9. php theexcerpt,WordPress:使用the_excerpt函数显示摘要信息
  10. 超市购物管理系统php,超市进销存管理系统PHP源码