数组
数组是一种数据结构,只能存储同一类型值。
数组的特点:
定长:数组的长度一旦确定就不能修改
创建数组时会开辟一块连续的内存来存储
存取元素的速度快,可以通过索引,快速定位到任意一个元素
数组的声明与初始化
声明
// 声明语法:数据类型[] 数组名
int[] arr;
初始化
静态初始化:
/ 方式一:数据类型[] 数组名 = {元素1,元素2,元素3,...}
int[] arr = {1,2,3,4};
// 方式二:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int[] arr = new int[]{1,2,3,4};
动态初始化:
/数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
int[] arr = new int[5]
数组元素的访问
索引:创建数组,内存会分配一块连续的空间来存储,第一个元素所在内存的地址称为基地址,那么第一个元素相对于基地址来说,偏移量为0,所以索引是从0开始,那么第二个地址与基地址之间就偏移了1. 因此,索引的范围为:[0,数组的长度-1] .
利用元素的索引(index)可以计算出该元素对应的存储地址,
通过 array.length 可以获得数组中元素的个数。
数组的遍历
public static void main(String[] args) {
int[] arr = new int[]{1,2,3,4,5};
//打印数组的属性,输出结果是5
System.out.println("数组的长度:" + arr.length);
//遍历输出数组中的元素
System.out.println("数组的元素有:");
for(int i=0; i<arr.length; i++){
System.out.println(arr[i]);
}
}
数组元素的默认值
当我们动态初始化数组时:
/数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
int[] arr = new int[5]
数组的拷贝
在Java中,可以将一个数组变量拷贝给另一个数组变量,这个时候,两个变量引用的是同一个数组。
int[] firstArray = {1,2,3,4,5};
int[] secondArray = firstArray ;
全新拷贝
那就要使用Arrays类的copyOf 方法:
int[] copiedArray=Arrays.copyOf(firstArray ,firstArray .length);
第一个参数是要拷贝的数组。第二个参数是数组的长度
Arrays.copyOf 这个方法通常用来增加数组的大小。比如
int[] copiedArray=Arrays.copyOf(firstArray ,2 * firstArray .length);
拷贝firstArray 数组,并且将数组扩大为firstArray 数组大小的两倍.
多余的元素的默认值是什么
int 类型的就是0, 布尔类型的就是false.
相反: 如果长度小于原始数组的长度
这种请跨的话,只拷贝最前面的数据元素。
比如元素数组的长度为10,拷贝时你传的参数是5,那就只拷贝原始数组的前5个元素。
数组的排序
若对数值型数组进行排序,则使用Arrays 类中的sort 方法。
int[] firstArray = {9,58,3,91,5};
Arrays.sort(firstArray);
一维数组的3种初始化方式
public static void main(String[] args) {
int[] array = {1,2,3,4,5};
int[] array2 = new int[]{1,2,3,4,5};
int[] array3 = new int[5];
System.out.println(Arrays.toString(array));
System.out.println(Arrays.toString(array2));
System.out.println(Arrays.toString(array3));
二维数组概述
1、二维数组其实就是一个特殊的一维数组,一维数组中每个元素就是一个一维数组
2、三维数组又是一个特殊的二维数组
二维数组的定义
int[][] a=new int[10][10];
String[][] b=new String[10][10];
初始化二维数组
//静态初始化
int[][] a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};
//动态初始化
String[][] b=new String[10][10];
b[0]=new String[]{"zahngsan","lisi","wangwu"};
b[1]=new String[]{"java","python","c++"};
二维数组的遍历
public class Text0 {
public static void main(String[] args) {
//静态初始化
int[][] a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};
//遍历
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
二维数组传递参数给方法
public class Text0 {
public static void main(String[] args) {
//静态初始化
int[][] a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};
//调用print方法
print(a);
}
public static void print(int[][] a){
//遍历
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
举例
第五套人民币的主币(不包括角、分)共有以下6种面值纸币:1元,5元,10元,20元,50元,100元。自定义方法CalculateMoney,计算要用这几种纸币组成金额“X”,最少需要多少纸币。
package ceshi
import java.util.*;
import java.util.regex.*;
public class Ceshi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr = new int[7];
System.out.println("请输入金钱");
String st = sc.nextLine();
if (isInteger(st)) {
int a = Integer.parseInt(st);
arr = Calculatemoney(a);
for (int i = 6; i >= 0; i--) {
switch (i) {
case 6:
System.out.println("100元需要:");
break;
case 5:
System.out.println("50元需要:");
break;
case 4:
System.out.println("20元需要:");
break;
case 3:
System.out.println("10元需要:");
break;
case 2:
System.out.println("5元需要:");
break;
case 1:
System.out.println("2元需要:");
break;
case 0:
System.out.println("1元需要:");
break;
}
System.out.println(arr[i] + "张");
}
} else {
System.out.println("请输入整数");
}
}
private static int[] Calculatemoney(int a) {
int temp;
int[] bb = { 0, 0, 0, 0, 0, 0, 0 };
temp = a;
while (temp >= 100) {
bb[6] += 1;
temp -= 100;
}
while (temp >= 50) {
bb[5] += 1;
temp -= 50;
}
while (temp >= 20) {
bb[4] += 1;
temp -= 20;
}
while (temp >= 10) {
bb[3] += 1;
temp -= 10;
}
while (temp >= 5) {
bb[2] += 1;
temp -= 5;
}
while (temp >= 2) {
bb[1] += 1;
temp -= 2;
}
while (temp >= 1) {
bb[0] += 1;
temp -= 1;
}
return bb;
}
public static boolean isInteger(String str) {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}
}