1.数组概述
2.初始化和默认值
//静动态初始化
int[] ids = new int[] {001,002,003,004,005};
String[] names = new String[3];
names[0] = "mk";
names[1] = "mk1";
names[2] = "mk2";
//names[3] = "mk";//Index 3 out of bounds for length 3
System.out.println("ids长度:"+ids.length);
System.out.println("names长度:"+names.length);
System.out.println("遍历ids:");
for ( int i=0; i<ids.length; i++ ) {
System.out.println(ids[i]);
}
System.out.println("遍历arrint:");
int[] arrint = new int[4];
for ( int i=0; i<arrint.length; i++ ) {
System.out.println(arrint[i]);
//0000
}
System.out.println("遍历arrlong:");
long[] arrlong = new long[2];
for ( int i=0; i<arrlong.length; i++ ) {
System.out.println(arrlong[i]);
//00
}
System.out.println("遍历arrfloat:");
float[] arrfloat = new float[2];
for ( int i=0; i<arrfloat.length; i++ ) {
System.out.println(arrfloat[i]);
//0.0
}
System.out.println("遍历arrchar:");
char[] arrchar = new char[2];
for ( int i=0; i<arrchar.length; i++ ) {
System.out.println("---"+arrchar[i]+"---");
//空格但是是0,非'0':--- ---
}
if(arrchar[0] == 0) {
System.out.println("是0~!");
}
System.out.println("遍历arrboolean:");
boolean[] arrboolean = new boolean[5];
for ( int i=0; i<arrboolean.length; i++ ) {
System.out.println(arrboolean[i]);
//false
}
System.out.println("遍历arrString:");
String[] arrString = new String[1];
for ( int i=0; i<arrString.length; i++ ) {
System.out.println(arrString[i]);
//null
if(arrString[0] == null) {
System.out.println("是null~!");
}
}
3.内存结构
4.二维
初始化:外层地址,内层和一维一样
System.out.println("遍历二维arr:");
int[][] arr = new int[3][4];
System.out.println(arr);//[[I@53bd815b
System.out.println(arr[2]);//[I@2401f4c3
System.out.println(arr[1][3]);//0
System.out.println("遍历二维arrdouble:");
double[][] arr1 = new double[3][];
System.out.println(arr1);//double
System.out.println(arr1[2]);//[I@2401f4c3
//System.out.println(arr1[1][3]);//报错:Cannot load from double array because "arr1[1]" is null
System.out.println("遍历二维arrString:");
String[][] arr2String = new String[3][4];
System.out.println(arr2String);//[[Ljava.lang.String;@7637f22
System.out.println(arr2String[2]);//[Ljava.lang.String;@4926097b
System.out.println(arr2String[1][3]);//null
5.练习
5.1一维
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int[]{8,2,1,0,3};//组成电话号码的数
int[] index = new int[]{2,0,3,2,4,0,1,3,2,3,3};
String tel = "";
for(int i = 0;i < index.length;i++){
tel += arr[index[i]];
}
System.out.println("联系方式:" + tel);
//联系方式:18013820100
}
6.应用
6.1算法:数组元素的赋值(杨辉三角、回形数等)
使用二维数组打印一个10行杨辉三角。
-
第一行有 1 个元素, 第 n 行有 n 个元素
-
每一行的第一个元素和最后一个元素都是 1
-
从第三行开始, 对于非第一个元素和最后一个元素的元素。即:
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
public static void main(String[] args) {
//声明,赋值,遍历
int[][] yangHui = new int[10][];
for(int i = 0;i<yangHui.length;i++) {
yangHui[i] = new int[i+1];
yangHui[i][0]=yangHui[i][i]=1;
//if(i>1) {
for(int j = 1;j < yangHui[i].length-1;j++) {
yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
// }
}
}
for(int i = 0;i<yangHui.length;i++) {
for(int j = 0;j<yangHui[i].length;j++) {
System.out.print(yangHui[i][j]+" ");
}
System.out.println();
}
6.2算法:求数值型数组中元素的最大值、最小值、平均数、总和等
定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。
要求:所有随机数都是两位数。
提示:[0,1) * 90-->[0,90) + 10 --> [10,100) -->[10,99]
(int)(Math.random() * 90 + 10)
public static void main(String[] args) {
int arr[] = new int[10];
for(int i = 0;i<arr.length;i++) {
arr[i] = (int)(Math.random()*90+10);
}
for(int i = 0;i<arr.length;i++) {
System.out.print(arr[i]+"\t");
}
System.out.println();
int maxValue = arr[0];
for(int i = 0;i<arr.length;i++) {
if(maxValue < arr[i]) {
maxValue = arr[i];
}
}
System.out.println("最大值为:"+maxValue);
}
6.3算法:数组的复制、反转、查找(线性查找、二分法查找)
1.复制。
使用简单数组
(1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。
(2)使用大括号{},把array1初始化为8个素数2,3,5,7,11,13,17,19。
(3)显示array1的内容。
(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值。(如array[0]=0,array[2]=2)。打印出array1。
public static void main(String[] args) {
/*
* (1)创建一个名为ArrayTest的类,在main()方法中声明array1和array2两个变量,他们是int[]类型的数组。
(2)使用大括号{},把array1初始化为8个素数2,3,5,7,11,13,17,19。
(3)显示array1的内容。
(4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值。(如array[0]=0,array[2]=2)。打印出array1。
*/
int[] array1,array2;
array1 = new int[] {2,3,5,7,11,13,17,19};
for(int i = 0;i<array1.length;i++) {
System.out.print(array1[i]+"\t");
}
//array2 = array1;//不能叫做数组赋值。小名儿的意思
array2 = new int[array1.length];
for(int i = 0;i<array2.length;i++) {
array2[i] = array1[i] ;
}
for(int i = 0;i<array2.length;i++) {
if(i % 2 == 0) {
array2[i] = i;
}
}
System.out.println();
System.out.println("**********************************************************");
System.out.println("array1:");
for(int i = 0;i<array1.length;i++) {
System.out.print(array1[i]+"\t");
}
//2 3 5 7 11 13 17 19
System.out.println();
System.out.println("array2:");
for(int i = 0;i<array2.length;i++) {
System.out.print(array2[i]+"\t");
}
//0 3 2 7 4 13 6 19
}
思考:array1和array2是什么关系?
大名小名的关系
拓展:修改题目,实现array2对array1数组的复制
行。
2.反转。
public static void main(String[] args) {
/*逆序*/
String[] array1,array2;//2用来验证,可有可无
array1 = new String[] {"A","B","C","D","E","F","G","H","I"};
array2 = new String[array1.length];
for(int i = 0;i<array1.length;i++) {
System.out.print(array1[i]+"\t");
array2[i] = array1[i] ;
}
for(int i = 0;i<array1.length / 2;i++) {
String temp = array1[i];
array1[i] = array1[array1.length - 1 - i];
array1[array1.length - 1 - i] = temp;
}
System.out.println();
System.out.println("array1:");
for(int i = 0;i<array1.length;i++) {
System.out.print(array1[i]+"\t");
}
System.out.println();
System.out.println("array2:");
for(int i = 0;i<array2.length;i++) {
System.out.print(array2[i]+"\t");
}
}
3.线性查找。
public static void main(String[] args) {
/*查找*/
String[] array1;
array1 = new String[] {"A","B","C","D","E","F","G","H","I"};
System.out.println("array1:");
for(int i = 0;i<array1.length;i++) {
System.out.print(array1[i]+"\t");
}
System.out.println();
Scanner input = new Scanner(System.in);
System.out.println("请输入要查找的元素:");
String dest = input.next();
boolean isFlag = true;
for(int i = 0;i<array1.length;i++) {
if(dest.equals(array1[i])) {//equals和==的区别!!!
System.out.print("恭喜!找到了该元素,其位置为:"+ i );
isFlag = false;
break;
}
}
if(isFlag) {
System.out.print("抱歉!没有找到该元素~");
}
}
4.二分查找。
public static void main(String[] args) {
/*二分查找。有序*/
int array1[] = new int[] {-50,-33,-21,0,7,6,34,60,81,100,};
System.out.println("array1:");
for(int i = 0;i<array1.length;i++) {
System.out.print(array1[i]+"\t");
}
System.out.println();
Scanner input = new Scanner(System.in);
System.out.println("请输入要查找的元素:");
int dest = input.nextInt();
int start = 0;
int end = array1.length - 1;
boolean isFlag = true;
while(start <= end) {
int middle = (start + end)/2;
if(dest == array1[middle]) {
System.out.print("恭喜!找到了该元素,其位置为:"+ middle );
isFlag = false;
break;
}
else if(dest < array1[middle]) {
end = middle - 1;
//middle = (start + end)/2;
}else {
start = middle + 1;
//middle = (start + end)/2;
}
}
if(isFlag) {
System.out.println("抱歉!没有找到该元素~");
}
}
6.4算法:数组元素的排序算法
6.4.1冒泡排序
public static void main(String[] args) {
/*冒泡排序*/
int array[] = new int[] {50,-33,21,0,-7,6,34,60,-81,100,};
System.out.println("array:");
for(int i = 0;i<array.length;i++) {
System.out.print(array[i]+"\t");
}
System.out.println();
//这儿
for(int i = 0;i<array.length - 1;i++) {
for(int j = 0;j<array.length - 1 - i;j++) {
if(array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
System.out.println("array:");
for(int i = 0;i<array.length;i++) {
System.out.print(array[i]+"\t");
}
System.out.println();
}
6.4.2快速排序
public class ArrayQuickSortTest {
//快排
public static void main(String args[]) {
int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
System.out.println("原来的:" + java.util.Arrays.toString(data));
quickSort(data,0,data.length-1);
System.out.println("快排后的:" + java.util.Arrays.toString(data));
}
public static void quickSort(int[] data, int start, int end) {
if(start > end) {
return;
}
int base = data[start];
int low = start;
int high = end;
while(low < high) {
while (low < high && data[high] >= base)
{
high--;
}
//交换low,high
int temp = data[low];
data[low] = data[high];
data[high] = temp;
while (low < high && data[low] <= base)
{
low++;
}
temp = data[high];
data[high] = data[low];
data[low] = temp;
}
base = data[low];
quickSort(data, start, low - 1);//
quickSort(data, low + 1, end);
}
}