数组是多个相同类型数据的组合,实现对这些数据的统一管理。数组中的元素可以是任何数据类型,包括基本类型和引用类型。数组属引用类型,数组型数据是对象(object),数组中的每个元素相当于该对象的成员变量。
声明和使用数组
//一维数组的声明方式:
//type var[] 或 type[] var;
//例如:
int a[];
int[] a1;
double b[];
Mydate[] c; //对象数组
//Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法
//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]);
}
}
}
常见问题
数组脚标越界异常(ArrayIndexOutOfBoundsException) |
int[] arr = new int[2]; System.out.println(arr[2]); 访问到了数组中的不存在的脚标时发生。 |
空指针异常(NullPointerException) |
int[] arr = null; System.out.println(arr[0]); arr引用没有指向实体,却在操作实体中的元素时。 |
多维数组
二维数组[][]:数组中的数组 |
格式1(动态初始化):int[][] arr = new int[3][2]; int[] n = new int[3]; |
定义了名称为arr的二维数组 二维数组中有3个一维数组 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1], arr[2] 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78; |
格式2(动态初始化):int[][] arr = new int[3][]; |
二维数组中有3个一维数组。 每个一维数组都是默认初始化值null (注意:区别于格式1) 可以对这个三个一维数组分别进行初始化 arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2]; 注: int[][]arr = new int[][3]; //非法 |
实例
1、求出数组中的最大值,最小值,平均值,和值,查找并输出出来
private static void test1() {
/**
* 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,
* 然后求出所有元素的最大值,最小值,平均值,和值,查找 并输出出来。
*/
int s[] = new int[10];
Random random = new Random();
for (int i = 0; i < 10; i++) {
s[i] = random.nextInt(100);
}
int sum = 0, max = s[0], min = s[0];
for (int i = 0; i < 10; i++) {
sum += s[i];
if (max < s[i]) max = s[i];
if (min > s[i]) min = s[i];
}
float avg = (float) sum / s.length;
System.out.println(java.util.Arrays.toString(s));
System.out.println("max:" + max);
System.out.println("min:" + min);
System.out.println("avg:" + avg);
}
2、将二维数组按行列位置互换
private static void test2() {
/**
* 定义一个int型的二维矩阵数组,包含9个元素
* 然后将这些元素按行列位置互换。
*/
int s1[][] = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int s2[][] = new int[s1.length][s1[0].length];
for (int i = 0; i < s1.length; i++) {
for (int j = 0; j < s1[i].length; j++) {
s2[i][j] = s1[j][i];
}
}
System.out.println("变化前:");
for (int j = 0; j < s1.length; j++) {
System.out.println(java.util.Arrays.toString(s1[j]));
}
System.out.println("变化后:");
for (int j = 0; j < s1.length; j++) {
System.out.println(java.util.Arrays.toString(s2[j]));
}
}
3、利用数组随机抽取幸运观众
private static void test3() {
/**
* 利用数组随机抽取幸运观众
* 随机生成观众
*/
String s[] = new String[50];
Random random = new Random();
for (int i = 0; i < 50; i++) {
s[i] = "观众" + i;
}
System.out.println("幸运观众是:");
System.out.println(s[random.nextInt(50)]);
}
4、利用数组反转字符串
private static void test4() {
/**
* 利用数组反转字符串
*/
String s = "hello world!";
StringBuilder sb = new StringBuilder();
for (int i = s.length() - 1; i >= 0; i--) {
sb.append(s.charAt(i));
}
System.out.println(sb);
}
5、选择排序
private static void test5() {
/**
* 选择排序
* 随机生成5个数
* 用选择排序将数组排序
*/
int s[] = new int[5];
Random random = new Random();
for (int i = 0; i < 5; i++) {
s[i] = random.nextInt(100);
}
System.out.println(java.util.Arrays.toString(s));
for (int i = s.length - 1; i >= 0; i--) {
int max = 0,max_index=0;
for (int j = 0; j < i + 1; j++) {
if(max < s[j]){
max = s[j];
max_index = j;
}
}
int temp = s[i];
s[i] = s[max_index];
s[max_index] = temp;
}
System.out.println(java.util.Arrays.toString(s));
}
6、冒泡排序
private static void test6() {
/**
* 冒泡排序
* 随机生成5个数
* 用冒泡排序将数组排序
*/
int s[] = new int[5];
Random random = new Random();
for (int i = 0; i < 5; i++) {
s[i] = random.nextInt(100);
}
System.out.println(java.util.Arrays.toString(s));
for (int i = 0; i < s.length; i++) {
for (int j = 0; j + i < s.length - 1; j++) {
if(s[j]>s[j + 1]){
int temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
System.out.println(java.util.Arrays.toString(s));
}
7、直接插入排序
private static void test7() {
/**
* 直接插入排序
* 随机生成5个数
* 用直接插入排序将数组排序
*/
int s[] = new int[5];
Random random = new Random();
for (int i = 0; i < 5; i++) {
s[i] = random.nextInt(100);
}
System.out.println(java.util.Arrays.toString(s));
for (int i = 1; i < s.length; i++) {
int temp = s[i],j;
for (j = i - 1; j >= 0 && s[j] > temp; j--) {
s[j + 1] = s[j];
}
s[j + 1] = temp;
}
System.out.println(java.util.Arrays.toString(s));
}
这是我自己挑选的例子,感觉比较有代表性,别问测试了没有哈,都是我自己撸的~。看懂了这些例子,可以说算是入门数组了吧。