博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA语言基础(五)--数组
阅读量:2094 次
发布时间:2019-04-29

本文共 3910 字,大约阅读时间需要 13 分钟。

JAVA语言基础(五)–数组

一.数组:

引入: 实际生活中,很多场合需要定义多个相同数据类型的变量,使用传统方式资源浪费,操作不方便–?

1.定义:

数组: 是一个变量,存储相同数据类型的一组数据,声明一个数组就是在内存空间划出一串连续的空间

2.组成:

  • 元素类型:指定数组中存放值的数据类型
  • 标识符(变量名):数组名称
  • 数组元素(变量值):存放在数组中的数据
  • 元素下标/角标:;存放在数组中的数据指定的编号,从0开始,用于操作数组中的数据

重点: 数组中存放的一定是相同的数据类型,数组的角标从0开始

3.数组创建语法:

方式一: 先声明,再分配空间,再赋值

int[] studentScore;            //声明数组:数据类型  [] 数组名;studentScore=new int[10];      //分配空间:数组名= new 数据类型[长度];studentScore[0]=89;            //赋值:数组名[数组下标]=数据值;

方式二: 边声明边分配空间,再赋值

int[] studentScore=new int[10];     //声明并分配空间:  数据类型 [] 数组名=new 数据类型[长度];studentScore[0]=89;                 //赋值: 数组名[数组下标]=数据值;

**方式三:**边声明边赋值:

int[] studentScore={
89,90,87,98}; //声明并赋值:数据类型[] 数组名={value1,value2,value3...};

//声明并赋值:数据类型[] 数组名=new 数据类型[]{value1,value2,value3...};int[] studentScore=new int[]{
89,90,87,98};

注意:

  • 该方式在声明时直接赋值,不能指定长度,即不能写成

    int[] studentScore =new int[4]{89,90,87,98};

4.数组具体使用案例

**案例: **

1、计算全班学员的平均分?

package cn.hz.demo2;import java.util.Scanner;/** * 数组具体使用 * 	需求: * 		计算5位同学的平均分 * 	需求分析: * 		先声明,再赋值 * 		1.5位同学分数--double[] * 		2.5位同学分数录入--for(){} * 		2.求总分-求和--for(){} * 		 * @author hz * */public class Demo1 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in); //定义变量和数组 double sum=0.0,avg=0.0; double[] studentScore=new double[5]; //赋值 for (int i = 0; i <5; i++) {
System.out.println("请输入第"+(i+1)+"位同学的分数"); studentScore[i]=input.nextDouble(); } //计算 for (int i = 0; i < 5; i++) {
sum=sum+studentScore[i]; //sum+=studentScore[i]; } //求平均分 avg=sum/5; System.out.println("5位同学的平均分是"+avg); }}

2、在一系列数组插入一个数

package cn.hz.demo4;import java.util.Arrays;import java.util.Scanner;/** * 需求: * 		有一组学员的成绩{99,85,82,63, 60},将它们按升序排列。要增加一个学员的成绩,将它插入成绩序列,并保持升序   90,89,78 *  *  * 需求分析: * 		0.定义数组的时候个数应该6,最后0; * 		1.升序: Arrays.sort;    60,63,82,85,99,0 * 		2.获取插入数据在数组中对应的下标 77  if(num>arr[i]){}   i----num * 		3.将获取到角标以后的数字全部后移 99-0,85-99,82-85 * 		4.将需要插入的数字通过角标放入到数组中 *  * 如果将数组内容进行排序:自己编写排序方法 * @author hz * */public class Demo2 {
public static void main(String[] args) {
Scanner input =new Scanner(System.in); int[] scores=new int[6]; scores[0]=99; scores[1]=85; scores[2]=82; scores[3]=63; scores[4]=60; //定义变量用于接受下标 int index=scores.length-1; System.out.println("请输入需要查找的数字"); int num=input.nextInt(); //获取位置 for (int i = 0; i < scores.length; i++) {
//当前数组内容为降序,找到需要查找数据第一次比较大 if(num>scores[i]){
index=i; //获取到角标以后直接结束循环 break; } } //将获取到的角标的后面所有内容全部后移 for(int j=scores.length-1;j>index;j--){
//从最后一个数字开始,将前面一个的值给后面 scores[j]=scores[j-1]; } //将新数字插入到数组中 scores[index]=num; //排序 Arrays.sort(scores); for(int i=0;i

5.数组常见错误分析

常见错误1:

在这里插入图片描述

常见错误2:

在这里插入图片描述

常见错误3:

在这里插入图片描述

小结:
  • 数组是(相同类型数据)的(有序)(集合)
  • 数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素element
  • 元素的表示 数组名[下标或者索引]:scores[7] scores[0] scores[9]
  • 数组索引从0开始
  • 每个数组元素有默认值 double为 0.0; boolean为 false; int为 0;
  • 数组元素有序的,不是大小顺序,是索引 的顺序
  • 数组中可以存储基本数据类型,可以存储引用数据类型;但是对于一个数组而言,数组的类型是固定的,只能是一个
  • 数组的长度是固定的,一经定义,不能再发生变化(数组的扩容

​ 数组是(相同类型数据)的(有序)(集合)

二.二维数组

有些场合需要多个数组同时进行定义内容,是否可以将数组放入数组进行数据的存储?

将一维数组放入另一个数组,该数组为二维数组

1.二维数组定义声明:

int[][] arr1;    //数据类型  [] [] 数组名;

int arr1 [][];   //数据类型  数组名  [] [] ;

2.二位数组分配空间

//数据类型[] []  数组名 =new 数据类型[ 表示有多少个一维数组,必填] [表示一维数组的个数,可填]int[][] arr1=new int[5][];  //数组名[下标]=new 数据类型[len]; 指定一维数组长度arr1[0]=new int[9];

3.二维数组赋值:

//	数据类型[] []  数组名 =new 数据类型[ 表示有多少个一维数组,必填] [表示一维数组的个数,可填]int [] [] arr1=new int[5] [6];  //表示给二维数组中的第一个一维数组中的第一个值赋值10arr1[0] [0]  =10:

//数据类型[] []  数组名={
{...}{...}...} ,,定义二维数组的同时直接赋值int[] [] arr1={
{
78,89,23,56},{
78,89,90},{
10}}

4.内存结构:

img

5.二维数组具体使用:杨慧三角

package cn.hz.demo2;/** * 杨辉三角 * @author hz * * 需求分析: * 第n行有n个数字. * 每一行的开始和结尾数字都为1. * 用二维数组表示就是a[i][0]=1;  a[i][j]=1(当i==j时); * n+1行的第i个数字等于第n行的i-1个数字加上第n行的i个数字。 *用二维数组表示就是 a[i+1][j]=a[i][j-1]+a[i][j]; * */public class Demo1{
public static void main(String[] args) {
int[][]a=new int[10][]; //初始化二维数组 for (int i=0;i

结果如下:

在这里插入图片描述

总结:

在这里插入图片描述

转载地址:http://hkuhf.baihongyu.com/

你可能感兴趣的文章
hibernate延迟加载(get和load的区别)
查看>>
关于文件拷贝效率问题
查看>>
MyBatis分页插件PageHelper的使用
查看>>
【MyBatis学习01】宏观上把握MyBatis框架
查看>>
【MyBatis学习02】走进MyBatis的世界
查看>>
【MyBatis学习03】原始dao开发方法及其弊端
查看>>
【MyBatis学习04】mapper代理方法开发dao
查看>>
【MyBatis学习05】SqlMapConfig.xml文件中的配置总结
查看>>
【MyBatis学习06】输入映射和输出映射
查看>>
【MyBatis学习07】动态sql
查看>>
【MyBatis学习08】高级映射之一对一查询
查看>>
【MyBatis学习09】高级映射之一对多查询
查看>>
【MyBatis学习10】高级映射之多对多查询
查看>>
【MyBatis学习11】MyBatis中的延迟加载
查看>>
【MyBatis学习12】MyBatis中的一级缓存
查看>>
【MyBatis学习13】MyBatis中的二级缓存
查看>>
【MyBatis学习14】MyBatis和Spring整合
查看>>
【MyBatis学习15】MyBatis的逆向工程生成代码
查看>>
Java 中 final、finally 和 finalize 使用总结
查看>>
volatile关键字解析
查看>>