JAVA学习day05 javase基础语法——数组概述和定义格式说明

1.1 数组的概念

数组是存储同一种数据类型多个元素的集合。也可以看成一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型,但在同一个数组中,存储的数据类型必须一致。

定义格式:
数据类型 [ ] 数组名 = new 数据类型 [ 元素个数或数组长度];

数据类型 数组名 [ ] = new 数据类型[元素个数或数组长度];

int[] arr = new int[2];
int arr [] = new int [3];

上述语句就相当于在内存中定义了2个 int 类型的变量,第一个变量的名称为arr[ 0 ];第二个变量就是arr[ 1 ];
要注意数组的索引是从 0 开始的,并非从1开始。

1.2 数组的初始化

Java中的数组必须先初始化,然后才能用。所谓的初始化,就是给数组中的元素分配内存空间,并为每个数组元素赋值。
初始化的分类有动态初始化 : 只指定长度,由系统给出初始化值;静态初始化 :给出初始化值,由系统判断长度。
下面是两种初始化的格式 :

//动态初始化
int[] arr = new int [100];
//静态初始化
int[] arr1 = {0,1,2,3,4,5};

下面通过一个案例介绍如何进行定义数组及访问数组中的元素:

package org.westos.demo3;public class ArrayDemo {public static void main(String[] args) {//动态初始化数组int[] arr = new int[5];arr[0] = 1;arr[1] = 2;arr[2] = 3;arr[3] = 4;//访问数组中的第四个元素System.out.println("arr[0]="+arr[0]);System.out.println("arr[1]="+arr[1]);System.out.println("arr[2]="+arr[2]);System.out.println("arr[3]="+arr[3]);System.out.println("arr[4]="+arr[4]);}
}

运行如下图所示:

图 1-1 运行结果截图

我们看到没被赋值的arr[ 4 ] 会被系统赋一个为0的初值。

1.3 Java中的内存分配以及堆和栈的区别

(1)栈:栈存放的是局部变量,局部变量是在方法中定义或声明的;
(2)堆:堆中存放的是所有 new 出来的对象;特点:
a:每一个 new 出来的对象都会给其分配一个地址值。
b:每个变量都有一个默认的初值:

  byte,short,int,long 初值为0 ;
  float,double 初值为0.0 ;
  char 初值是一个空字符’ \u000’ ;
  boolean 初值为false ;
  引用数据类型为null ;
c:变量使用完毕后就变成了垃圾,等待垃圾回收器对其回收。
(3)方法区:用于存储已被JVM加载的类信息 、常量 、静态变量 。
(4)本地方法栈:(和系统相关)。
(5)寄存器:cpu 使用。

下面我们通过几个案例分析数组的内存图解:
(1)定义一个数组,输出数组名称和数组中的元素值,给数组赋值,再次输出数组名称和数组中的元素值。
代码:

package org.westos.demo3;public class ArrayDemo1 {public static void main(String[] args) {int[] arr = new int[3];System.out.println("arr[0]="+arr[0]);System.out.println("arr[1]="+arr[1]);System.out.println("arr[2]="+arr[2]);arr[0] = 1;arr[1] = 2;arr[2] = 3;System.out.println("-----------------");System.out.println("arr[0]="+arr[0]);System.out.println("arr[1]="+arr[1]);System.out.println("arr[2]="+arr[2]);}
}

运行结果:

图 1-2 运行结果截图
内存图:

图 1-3 内存图

1.4 数组的遍历
在操作数组时,经常需要依次访问数组中的每个元素,这种操作称作数组的遍历。接下来通过一个案例来学习如何使用for循环来遍历数组,如下所示。

package org.westos.demo2;public class ArrayDemo {public static void main(String[] args) {int[] arr = {1,2,3,4,6,9,45,52,4,65};for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+"\t");}}
}

运行结果:

图 1-4 运行结果截图

上述代码中,用一个 for 循环定义一个变量 i 来作为数组的索引依次访问数组中的元素,循环打印出数组中的每个元素。

案例:在操作数组时,经常需要获取数组中元素的最值。接下来通过一个案例来演示如何获取数组中元素的最大值,如下代码所示:

package org.westos.demo2;public class ArrayMaxDemo {public static void main(String[] args) {int[] arr = {1,2,3,6,7,9};int max = arr[0];for (int i = 1; i < arr.length; i++) {if(arr[i] > max ){max = arr[i];}}System.out.println("数组的最大值是:"+max);}
}

运行结果如下:

图 1-5 运行结果截图
上述代码中,首先定义一个数组arr,静态初始化数组后,数组中有六个元素,然后我们假设arr[ 0 ]作为数组中的最大值,再利用一个 for 循环遍历数组中的元素和这个arr [ 0 ]进行比较,如果遍历的这个元素大于我们赋的初值,就把这个元素作为最大值和接下来的数组中其他元素比较,直到数组遍历完,得出最大值的结果。

1.5 二维数组

● 定义方式:
(1)int [ ][ ] arr = new int [ 2 ][ 3 ];
(2)int [ ][ ] arr = new int [ 3 ][ ];
(3)int[ ][ ] arr = {{1,2},{3},{4,5},{6,7,9}};

● 获取二维数组中的值和二位数组的遍历
通过下面的一段代码来看:

package org.westos.demo2;public class ArrayDemo2 {public static void main(String[] args) {int[][] arr = new int [2][];int[] arr1 = {1,2,3};int[] arr2 = {4,5,6};arr[0] = arr1;arr[1] = arr2;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {System.out.print(arr[i][j]+"\t");}System.out.println();}}
}

来看上面的代码,其实获取二维数组的值和一维数组是相似的,只不过比一维数组多了个索引,二维数组的本质就是在一个数组中再存储了若干个一维数组,二维数组的遍历也是一样,在一维数组遍历的基础上再加一个for循环,两个for循环嵌套就能遍历出二维数组了。

运行结果:

图 1-6 运行结果截图

二维数组的内存图


● 二维数组案例练习:
(1) 打印杨辉三角形(行数可以键盘录入)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

import java.util.Scanner;public class YangHuiTriangle {public static void main(String[] args) {System.out.println("请输入杨辉三角的行数:");Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int[][] arr = new int[n][n];//1.先把第一行和最后一行的元素给赋值1,打印看一下形状对不对for (int i = 0; i < arr.length; i++) {for (int j = 0; j <= i; j++) {arr[i][0] = 1;arr[i][i] = 1;//System.out.print(arr[i][j]+"\t");}}//2.分析元素之间的关系知道,除了1之外,别的元素的值都是等于上行的元素的值加上上一行前一列的值。for (int i = 2; i < arr.length; i++) {for (int j = 1; j <= i; j++) {arr[i][j] = arr[i-1][j-1] + arr[i-1][j];//System.out.print(arr[i][j]+"\t");}// System.out.println();}//3. 最后打印输出杨辉三角for (int i = 0; i < arr.length; i++) {for (int j = 0; j <= i ; j++) {System.out.print(arr[i][j]+"\t");}System.out.println();}}
}

运行结果:

图 1-7 运行结果截图

1.6 数组的逆序

案例:定义一个数组,把数组逆序输出;
注意:逆序并非反向遍历输出。

public class ArrayReverseDemo {public static void main(String [] args){//数组的逆序思想//注意:不等于数组反向遍历输出int[] array = {0,1,2,3,4,5,6,7,8,9};int max = array.length-1;int min = 0;int temp;for (int i = 0; i < array.length; i++) {if (max > min ){temp = array[max];array[max] = array[min];array[min] = temp;}max--;min++;System.out.print(array[i]+"\t");}}
}

◆ 数组的逆序趋势就是把数组中最大的元素和最小的与元素给一个索引max和min,然后交换这两个数组元素的值,再进行一个max- -,min++;循环在max等于min的上一次终止,数组的逆序就完成了。
运行结果:

图 1-8 运行结果截图

1.7递归

递归概述: 方法定义中调用方法本身的现象

递归注意事项:
(1)要有出口,否则就是死递归;
(2)次数不能太多,否则就内存溢出。

案例:不死神兔问题(菲波那切数列):有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …

import java.util.Scanner;public class RecursiveDemo {public static void main(String[] args) {System.out.println("请输入月份查看有多少对兔子:");Scanner sc = new Scanner(System.in);int month = sc.nextInt();int num = rabbit(month);System.out.println("有"+num+"对兔子");}public static int rabbit(int n){if(n == 1 || n == 2){return 1;}else{return rabbit(n-1)+rabbit(n-2);}}
}

运行结果:

图 1-9 运行结果截图

JavaSE基础——数组概述和定义格式说明相关推荐

  1. Java数组概述和定义

    1.数组概述和定义格式说明 为什么要有数组(容器): 为了存储同种数据类型的多个值 数组概念: 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数据类型,也可以存储引 ...

  2. JavaSE基础——J2SE概述

    J2SE概述 1.计算机语言发展简史 2.Java 发展简史 3.Java 语言特性 4.Java 的加载与执行 5.开始第一个Java程序 5.1.J2SE 的安装 5.1.2.JRE与JDK 5. ...

  3. JavaSE基础知识(附上代码实现)1

    ###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应用举例     * 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动. ...

  4. Java语言基础(数组)

    Java语言基础(数组概述和定义格式说明) A:为什么要有数组(容器) 为了存储同种数据类型的多个值 B:数组概念 数组是存储同一种数据类型多个元素的集合.也可以看成是一个容器. 数组既可以存储基本数 ...

  5. JS基础之数组--概述、创建数组的几种方式、数组的特点、数组的常用方法、数组的解构赋值、数组高级API

    一.概述 描述:数组(array)是按照一定顺序排列的一组值,每个值都拥有自己的编号,编号从0开始.整个数组用方括号来表示. 语法:var arr=[item1,item2,item3-] 1.1 注 ...

  6. Java 数组定义格式-数组动态初始化-数组元素的访问-数组静态初始化-数组的遍历-数组获取最大值

    数组定义格式: 1.数组概述 在一个班级中,有非常多学生需要存储每位学生的考试成绩. 比如 a=98; b=97; c=96; d=88; -- 1)数组概述:一次性声明大量的用于存储数据的变量; 这 ...

  7. 前端:JS/22/函数(函数的概念,函数的定义格式,函数定义格式的说明,函数的调用,函数的参数),全局变量和局部变量,拷贝传值和引用传址,匿名函数,二维数组,对象,自定义对象的创建

    函数 1,函数的概念 函数,是将一段公共的代码进行封装,给它起个名字叫"函数" 函数可以一次定义,多次调用:函数可以将常用的功能代码,进行封装,如:用户名的验证,验证码函数,邮箱验 ...

  8. java基础(4)(方法的定义格式,调用方式,使用,参数设置,方法重载等)

    什么是方法? 方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 方法的使用 需求:打印扑克牌,如下形式: 首先需要定义两个数字组,一个用来存字母和数字,一个用来存 ...

  9. 2.Java基础之概述-流程控制+数组+IDEA基本使用+程序调试

    1.流程控制 1.1 流程是什么 生活中处处都有流程:比如你们大学报到 程序就是为了解决生活的问题,程序也有流程 1.2 顺序流程 从上到下,一条直线走下去 1.3 分支结构 1.3.1 if单分支 ...

  10. Java之数组的定义格式,【默认值规则】,Java内存划分5大区,面向对象类的基本定义和对象的使用,private和this关键字,类的构造方法,标准类的组成部分。

    目录 1.数组 动态初始化数组的格式: 默认值规则 静态初始化数组的格式: 静态方式的省略格式 注意: 2.java的内存划分 3.数组内存图 4.数组常见的问题 5.面向对象 (1)类和对象 (2) ...

最新文章

  1. mac电脑sublime text3安装pretty json插件
  2. php性能优化和细节优化
  3. 深度学习核心技术精讲100篇(八)-keras 实战系列之深度学习中的多任务学习(Multi-task learning)
  4. 搜索旋转排序数组—leetcode31
  5. mysql in优化_MySQL 探秘: 1 整体架构
  6. 这样查看告警邮件要慢一点……
  7. linux下的多线程
  8. win32开发(窗口类和窗口)
  9. 计算机财务管理复利现值的公式,财务管理公式
  10. c语言变量声明举例,C语言变量的定义和声明
  11. CCF201809-3 元素选择器(100分)【文本处理】
  12. 深度学习实战 Tricks —— 梯度消失与梯度爆炸(gradient exploding)
  13. 深度学习基础(十一)—— 稀疏自编码器(二)
  14. SQL Server数据库partition by 与ROW_NUMBER()函数使用详解[转]
  15. 关于html中对换行的处理
  16. JS前端实现点击按钮生成并下载txt文件
  17. linux ftps ftp,linux ftps ftp-over-ssl 配置实验
  18. rba有哪几個主要組成部分_RBA管理体系有哪些
  19. tomcat8的apr模式配置SLL证书
  20. 齐岳|马钱苷酸小麦麦清白蛋白纳米粒|雷公藤红素乳清白蛋白纳米粒Celastrol-whey protein

热门文章

  1. 程序设计实习MOOC / 程序设计与算法(二)第二周测验(2018春季)
  2. nodepad代码格式复制到word发布到博客
  3. wrapper x64 版本发布到centos
  4. [JAVA][Eclipse]JVM terminated. Exit code=13
  5. 什么造就一个伟大的站点
  6. CString的基本用法
  7. oracle数据库速度测试,ORACLE数据库测试数据插入速度
  8. 幅度为a0的载波由峰峰值_【砂石骨料】机制砂亚甲蓝值对混凝土性能的影响研究...
  9. 拓端tecdat|Python高维统计建模变量选择:SCAD平滑剪切绝对偏差惩罚、Lasso惩罚函数比较
  10. 拓端tecdat|R语言小数定律的保险业应用:泊松分布模拟索赔次数