数组

数组概述

数组是多个相同类型数据的组合,实现对这些数据的统一管理。
数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。

一维数组声明

一维数组的声明方式: type var[] 或 type[] var
例如:
  int a[];
  int[] a1;
  double b[];
  Mydate []c; //对象数组
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法

数组元素的引用

Java中使用关键字 new 创建数组对象
定义并用运算符 new 为之分配空间后,才可以引用数组中的每个元素;
数组元素的引用方式:数组名[数组元素下标]
  数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
  数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 - n-1;

  如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
每个数组都有一个属性 length 指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)

数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化
例如:
public class Test {
  public static void main(String argv[]) {
    int a[]= new int[5]; 
    System.out.println(a[3]); //a[3]的默认值为0
  }
}

数组元素的默认初始值

创建基本数据类型数组

Java中使用关键字new 创建数组对象

public class Test {
 public static void main(String args[]) {
  int[] s;
  s = new int[10];
  for ( int i=0; i<10; i++ ) {
   s[i] =2*i+1;
   System.out.println(s[i]);
  }
 }
}

创建对象数组

1、

class MyDate{
private int day;
private int month;
private int year;
public MyDate(int d, int m, int y){
day = d; month = m; year = y;
}
public void display(){
System.out.println(day + "-" + month + "-" + year);
}
}

2、

public class Test {
public static void main(String args[]) {
MyDate[] m;
m = new MyDate[10];
for ( int i=0; i<10; i++ ) {
m[i] =new MyDate(i+1, i+1,1990+i);
m[i].display();
}
}
}

数组初始化

动态初始化:数组定义与为数组元素分配空间并赋值的操作分开进行。

    int a[];
a = new int[3];
a[0] = 3;
a[1] = 9;
a[2] = 8;
MyDate dates[];
dates = new MyDate[3];
dates[0] = new MyDate(22, 7, 1964);
dates[1] = new MyDate(1, 1, 2000);
dates[2] = new MyDate(22, 12, 1964);

静态初始化:在定义数组的同时就为数组元素分配空间并赋值。

    int a[] = { 3, 9, 8};

    MyDate dates[] = {
new MyDate(22, 7, 1964),
new MyDate(1, 1, 2000),
new MyDate(22, 12, 1964)
};

练习

1、数组的常见操作

    //1. 数组的声明
//int i = 0;
int [] a = null; //推荐使用此种方式进行声明.
int b [] = null; //注意: Java语言中声明数组时不能指定其长度(数组中元素的数)
//int [5] c = null; //注意: 若没有为数组变量分配指向的内存空间, 就调用其属性, 会在运行时发生 "空指针异常"
//System.out.println(a.length); //2. 为数组分配内存空间
a = new int[10]; //3. 获取数组的长度
System.out.println(a.length); //10 //5. 对数组元素进行初始化
for(int i = 0; i < a.length; i++){
a[i] = 100 + i;
} //4. 访问数组的元素: 数组名[数组元素下标]. 注意: 下标从 0 开始, 所以最大值是 lengh - 1, 而不是length;
//数组元素会进行默认的初始化:
for(int i = 0; i < a.length; i++){
System.out.println(a[i]);
} //若访问数组的下标超过合法范围, 则在运行时会抛出ArrayIndexOutOfBoundsException
//a[10] = 10; //数组的静态初始化
int [] c = {1, 2, 3, 4, 5};
int [] d = new int[]{2, 3, 4, 5, 6}; for(int i = 0; i < d.length; i++){
System.out.println(d[i]);
} //声明一个二维数组
int [][] aa = new int[5][]; //对二维数组的元素进行初始化: 二维数组的元素是一个一维数组!
//遍历需要使用嵌套的 for 循环.
for(int i = 0; i < aa.length; i++){
aa[i] = new int[i + 1]; for(int j = 0; j < aa[i].length; j++){
aa[i][j] = 1 + i * j;
}
} //对二维数组进行遍历
for(int i = 0; i < aa.length; i++){
for(int j = 0; j < aa[i].length; j++){
System.out.print(aa[i][j] + " ");
}
System.out.println();
}

2、从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
  成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’
  成绩>=最高分-30 等级为’C’ 其余 等级为’D’
  提示:先读入学生人数,根据人数创建int数组,存放学生成绩。

  /**
  * 2.从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
   * 成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’
   * 成绩>=最高分-30 等级为’C’ 其余 等级为’D’
   * 提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
   */
//1. 创建 Scanner 类
Scanner scanner = new Scanner(System.in); //2. 读入要录入的学生人数
System.out.print("请输入学生人数");
int count = scanner.nextInt(); //3. 创建一个 int 类型的数组, 用于存放学员的成绩, 数组的长度为 2 所录入数值
int [] scores = new int[count]; //4. 利用循环录入学生的成绩, 同时得到最高分. 把学生成绩录入到 3 声明的数组中.
int highScore = 0; for(int i = 0; i < scores.length; i++){
scores[i] = scanner.nextInt(); if(scores[i] > highScore){
highScore = scores[i];
}
} //5. 遍历 3 声明的数组, 根据最高分, 获取学生的升级等级.
for(int i = 0; i < scores.length; i++){
if(scores[i] >= highScore - 10){
System.out.println("student " + i + " score is " + scores[i] + " grade is A");
}else if(scores[i] >= highScore - 20){
System.out.println("student " + i + " score is " + scores[i] + " grade is B");
}else if(scores[i] >= highScore - 30){
System.out.println("student " + i + " score is " + scores[i] + " grade is C");
}else{
System.out.println("student " + i + " score is " + scores[i] + " grade is D");
}
}

多维数组

二维数组举例:
int [][] a = {{1,2},{3,4,0,9},{5,6,7}};

Java中多维数组被做为数组的数组处理
Java中多维数组的声明和初始化应按从高维到低维的顺序进行
  int t [][] = new int [4][];//t有4行,第一个维数不空即可
  t[0] = new int[5]; //每一行都是一个有5个元素的一维数组
  t[1] = new int[5];
  int t1[][] = new int [][4]; //非法

Java中多维数组不必须是规则矩阵形式
  int[][] tt = new int[4][];
  tt[0] = new int[2];
  tt[1] = new int[4];
  tt[2] = new int[6];
  tt[3] = new int[8];

  int tt[][] = new int[4][5]; //tt是一个4行5列的二维数组

  int [][] aa = new int[4][];

  aa[0] = new int[5];

  aa[1] = new int[1];

  aa[2] = new int[3];

  //…

多维数组初始化

静态初始化
  int intArray[][] = {{1,2},{2,3},{3,4,5}};
  int intArray1[3][2] = {{1,2},{2,3},{4,5}};
  //illegal,等号左边不能指定维数
动态初始化
  int a[][] = new int[4][5];
  int b[][] = new int[3][]
  b[0] = new int[2];
  b[1] = new int[3];
  b[2] = new int[5];

数组排序

Java.util.Arrays类的 sort() 方法提供了数组元素排序功能:

 import java.util.*;
public class Sort {
public static void main(String[] args) {
int [] number = {5,900,1,5,77,30,64,700};
Arrays.sort(number); for(int i = 0; i < number.length; i++)
System.out.println(number[i]);
}
}

使用二维数组打印 10 行的杨辉三角, 杨辉三角实际上是二项式展开式的系数

/**
* 1 (a+b)^0
* 1 1 (a+b)^1
* 1 2 1 (a+b)^2
* 1 3 3 1 (a+b)^3
* 1 4 6 4 1
* 1 5 10 10 5 1
* ...
* 1. 什么是杨辉三角: 二项式展开式的系数
* 2. 为什么使用的是 二维数组: 因为杨辉三角由行和列组成, 每一行是一个一维数组, 而杨辉三角则是有一维数组组成的数组, 即二维数组.
* 3. 杨辉三角的具体特点:
* 3.1 第 n 行有 n 个元素(n >= 1)
* 3.2 每一行的第一个元素和最后一个元素都是 1
* 3.3 不等于 1 的那些元素的值为上一行的对应列和对应列的前一列的元素的和.
*/ //1. 先声明一个二维数组: 二维数组有 10 个元素
int [][] yh = new int[10][]; //2. 对二维数组的元素进行初始化: 第 i 个元素(i 从 0 开始) 为长度为 i + 1 的一维数组.
for(int i = 0; i < yh.length; i++){
   //二维数组的每一个元素是一维数组, 而一维数组时引用类型, 其默认值为 null
  //System.out.println(yh[i]);   yh[i] = new int[i + 1];   //3. 对具体的每一个元素进行初始化(是 1 的元素): yh[i][0] = 1, yh[i][i] = 1
   yh[i][0] = 1;
   yh[i][i] = 1;   //4. 对具体的每一个元素进行初始化(不是 1 的元素): yh[i][j] = yh[i-1][j] + yh[i-1][j-1];
  // (i > 1 && j > 0 && j < i)
  if(i > 1){
   for(int j = 1; j < i; j++){
   yh[i][j] = yh[i-1][j] + yh[i-1][j-1];
   }
  }
}
//打印
for(int i = 0; i < yh.length; i++){
for(int j = 0; j < yh[i].length; j++){
System.out.print(yh[i][j] + "\t");
}
   System.out.println();
  }

Java 基本语法----数组的更多相关文章

  1. java基础语法 数组

    数组是相同数据类型元素的集合   数组本身是引用数据类型,即对象.但是数组可以存储基本数据类型,也可以存储引用数据类型. 在java中如果想要保存一组基本类型的数据,使用数组:如果想保存一组对象或者其 ...

  2. Java 基本语法---Java数组

    Java 基本语法---Java数组 0. 概述 数组:相同类型的数据 按照顺序 组成的一种 引用数据类型 . 数据类型:基本数据类型 + 引用数据类型: 引用数据类型:类 + 接口 + 数组 : 一 ...

  3. Java基础语法(数组)

    第4天 Java基础语法 今日内容介绍 u 流程控制语句(switch) u 数组 第1章 流程控制语句 1.1 选择结构switch switch 条件语句也是一种很常用的选择语句,它和if条件语句 ...

  4. JavaSE入门学习9:Java基础语法之数组

    一数组的定义 数组能够理解为是一个巨大的"盒子",里面能够按顺序存放多个类型同样的数据.比方能够定义int型的数组 scores存储4名学生的成绩. watermark/2/tex ...

  5. Java基础语法(7)-数组

    title: Java基础语法(7)-数组 blog: CSDN data: Java学习路线及视频 1.数组的概述 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并 ...

  6. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  7. 2、Java 基础语法标识符、修饰符、变量、 数组、枚举、关键字

    Java 基础语法 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如 ...

  8. 075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现

    075 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 07 综合案例-数组移位-主方法功能4的实现 本文知识点:综合案例-数组移位-主方法功能4的实现 说明:因为 ...

  9. 074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现

    074 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 06 综合案例-数组移位-主方法功能3的实现 本文知识点:综合案例-数组移位-主方法功能3的实现 说明:因为 ...

随机推荐

  1. Tomcat: 8080端口被占用

    用eclipse重启tomcat的时候可能出现这样的错误提示,说明tomcat没有成功地关闭掉. 解决办法:尝试直接用tomcat的shutdown.bat关闭即可,一般都可以解决问题

  2. [转]好用工具:Oracle SQL Developer

    我們一直以來就很少使用 Oracle 資料庫,一年下來也頂多 1 ~ 2 個案子採用 Oracle 的資料庫,所以一直都對 Oracle 資料庫的操作不太熟悉,尤其是用 Oracle 內建的那些超難用 ...

  3. java命令行打war

    java命令行打war(windows下) 切换到需要打包文件夹low的上级目录>jar -cfM legendwealth.war -C low .

  4. 一款纯css3实现的颜色渐变按钮

    之前为大家分享了推荐10款纯css3实现的实用按钮,今天给大家带来一款纯css3实现的颜色渐变按钮.这款按钮的边框和文字的颜色通过css3实现两种颜色的渐变,效果非常好看,一起看下效果图: 在线预览  ...

  5. IIS安全加固

    1 删除IIS默认站点 把IIS默认安装的站点删除或禁用掉. 2 禁用不必要的Web服务扩展 打开IIS 管理器,检查是否有不必要的“Web服务扩展”,如果有则禁用掉.如下图所示: 3 IIS访问权限 ...

  6. Maven学习之(三)Maven插件创建web项目

    这里来记录一下用eclipse 创建maven 的web项目. 添加jar依赖. <project xmlns="http://maven.apache.org/POM/4.0.0&q ...

  7. js数组添加或删除元素

    var arr = new Array(); arr[] = "aaa"; arr[] = "bbb"; arr[] = "ccc"; ar ...

  8. VS2008 express + opencv配置

    刚开始接触opencv,不是很熟悉,配置过程主要参考了这篇博客,大家可以去看看 http://www.cnblogs.com/micky-zhou/archive/2012/08/06/2624433 ...

  9. 内核定时器timer_list

    内核在时钟中断发生后执行检测各个定时器是否到期,到期后的定时器处理函数将作为软中断在底半部执行.实质上,时钟中断处理程序会唤起TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器.lin ...

  10. android学习日记01--综述

    开个博客,写点关于Android的知识,希望温故而知新吧! 一.总体框架 先上一张google提供官方的Android框架图: Android系统架构由5部分组成,分别是:Linux Kernel.A ...