赞
踩
public class Array01 { //编写一个main函数 public static void main(String[] args) { //一个养鸡场有 6 只鸡,它们的体重分别是 3kg,5kg,1kg,3.4kg,2kg,50kg 。 //请问这六只鸡的总体重是多少?平均体重是多少? 请你编一个程序 // //思路分析 //1. 定义六个变量 double 求和 //2. 平均体重 = 总体重 / 6 //3. 分析传统实现的方式问题:6->600 - 麻烦 //4. 引出新的技术->数组 // double hen1 = 3; // double hen2 = 5; // double hen3 = 1; // double hen4 = 3.4; // double hen5 = 2; // double hen6 = 50; // double totalWeight = hen1 + hen2 + hen3 + hen4 + hen5 + hen6; // double avgWeight = totalWeight / 6; // System.out.println("总体重=" + totalWeight); // System.out.println("平均体重=" + avgWeight); //用数组来解决问题 //定义一个数组 //1. double[] 表示是 double类型的数组,数组名 hens //2. {3, 5, 1, 3.4, 2, 50} 表示数组的值/元素,依次表示数组的第几个元素 // double[] hens = {3, 5, 1, 3.4, 2, 50}; //遍历数组 得到数组的所有元素的和:使用for循环 //1. 我们可以通过 hens[下标] 来访问数组的元素, // 下标从0开始编号的,比如第一个元素就是 hens[0] // 第2个元素就是 hens[1] ,依此类推 //2. 通过for循环就可以循环的访问数组的元素/值 //3. 使用一个变量 totalWeight 将各个元素累积 System.out.println("===使用数组解决==="); //在java中,可以通过 数组名.length 得到数组的大小/长度 System.out.println("数组的长度=" + hens.length); double totalWeight = 0; for (int i = 0; i < hens.length; i++) { //System.out.println("第" + (i+1) + "个元素的值=" + hens[i]); totalWeight += hens[i]; } System.out.println("总体重=" + totalWeight); System.out.println("平均体重=" + (totalWeight / hens.length)); } }
数组的定义:
数据类型 数组名[] = new 数据类型[大小] - 另外:[]可以写在数据类型后面,也可以写在数组名后面
int a[] = new int[5];//创建了一个数组,名字为a,存放5个int
数组的引用(使用/访问/获取数组元素):
数组名[下标/索引/index] 比如:你要使用a数组的第3个数 - a[2]
注意:数组的下标从0开始
import java.util.Scanner; public class Array02 { //编写一个main函数 public static void main(String[] args) { //演示 数据类型 数据名[] = new 数据类型[大小] //要求:循环输入5个成绩,保存到double数组,并输出 //步骤 //1. 创建一个 double 数组,大小为5 //(1)第一种动态分配方式 double scores[] = new double[5]; //循环输入 //scores.length 表示数组的大小/长度 Scanner myScanner = new Scanner(System.in); for (int i = 0; i < scores.length; i++) { System.out.println("请输入第" + (i+1) + "个元素的值"); scores[i] = myScanner.nextDouble(); } //输出,遍历数组 System.out.println("当前数组的元素/值的情况如下:"); for (int i = 0; i < scores.length; i++) { System.out.println("第" + (i+1) + "个元素的值=" + scores[i]); } } }
先声明数组:
语法:数据类型 数组名[]; 也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;
创建数组:
语法:数组名 = new 数据类型[大小]
a = new int[10];
import java.util.Scanner; public class Array02 { //编写一个main函数 public static void main(String[] args) { //演示 数据类型 数据名[] = new 数据类型[大小] //要求:循环输入5个成绩,保存到double数组,并输出 //步骤 //1. 创建一个 double 数组,大小为5 //(2)第二种动态分配方式,先声明数据,再 new 分配空间 double scores[];//声明数组 scores = new double[5];//分配了内存空间,可以存放数据 //循环输入 //scores.length 表示数组的大小/长度 Scanner myScanner = new Scanner(System.in); for (int i = 0; i < scores.length; i++) { System.out.println("请输入第" + (i+1) + "个元素的值"); scores[i] = myScanner.nextDouble(); } //输出,遍历数组 System.out.println("当前数组的元素/值的情况如下:"); for (int i = 0; i < scores.length; i++) { System.out.println("第" + (i+1) + "个元素的值=" + scores[i]); } } }
初始化数组:
语法:数据类型 数组名[] = {元素值1, 元素值2, …};
int a[] = {2, 5, 6, 7, 89, 90, 34, 56};//如果知道数组有多少元素,可以在[]内写上具体值
public class Array01 { //编写一个main函数 public static void main(String[] args) { //一个养鸡场有 6 只鸡,它们的体重分别是 3kg,5kg,1kg,3.4kg,2kg,50kg 。 //请问这六只鸡的总体重是多少?平均体重是多少? 请你编一个程序 //用数组来解决问题 //定义一个数组 //1. double[] 表示是 double类型的数组,数组名 hens //2. {3, 5, 1, 3.4, 2, 50} 表示数组的值/元素,依次表示数组的第几个元素 // double[] hens = {3, 5, 1, 3.4, 2, 50}; //遍历数组 得到数组的所有元素的和:使用for循环 //1. 我们可以通过 hens[下标] 来访问数组的元素, // 下标从0开始编号的,比如第一个元素就是 hens[0] // 第2个元素就是 hens[1] ,依此类推 //2. 通过for循环就可以循环的访问数组的元素/值 //3. 使用一个变量 totalWeight 将各个元素累积 System.out.println("===使用数组解决==="); //在java中,可以通过 数组名.length 得到数组的大小/长度 System.out.println("数组的长度=" + hens.length); double totalWeight = 0; for (int i = 0; i < hens.length; i++) { //System.out.println("第" + (i+1) + "个元素的值=" + hens[i]); totalWeight += hens[i]; } System.out.println("总体重=" + totalWeight); System.out.println("平均体重=" + (totalWeight / hens.length)); } }
public class ArrayDetail {
//编写一个main函数
public static void main(String[] args) {
//1. 数据是多个相同类型数据的组合,实现对这些数据的统一管理
//int arr1[] = {1, 2, 3, 60}//ok
//int arr1[] = {1, 2, 3, 60, 1.1}//error double->int
//int arr1[] = {1, 2, 3, 60, "hello"}//error Sring->int
//double arr2[] = {1.1, 2.2, 3, 60};//ok
double arr2[] = {1.1, 2.2, 3, 60.6, 100};//ok int -> double 自动转换
}
}
public class ArrayDetail {
//编写一个main函数
public static void main(String[] args) {
//2. 数组中的元素可以是任意数据类型,包括基本类型和引用类型,但是不能混用
String arr3[] = {"北京", "jack", "milan"};//引用类型
}
}
public class ArrayDetail {
//编写一个main函数
public static void main(String[] args) {
//3. 数组创建后,如果没有赋值,会有默认值
//int 0,short 0,byte 0,long 0,float 0.0,double 0.0,char \u0000
//boolean false,String null
short arr4[] = new short[3];
System.out.println("====数组4====");
for (int i = 0; i < arr4.length; i++) {
System.out.println(arr4[i]);
}
}
}
使用数组的步骤:
a)声明数组并开辟空间
b) 给数组各个元素赋值
c) 使用数组
数组的下标是从0开始的
数组下标必须在指定范围内使用,否则报错:下标越界异常,比如:int arr[] = new int[5];则有效的下标为 0-4
public class ArrayDetail {
//编写一个main函数
public static void main(String[] args) {
//6. 数组下标必须指定范围内使用,否则报错:下标越界异常
//比如:int arr[] = new int[5]; 则有效下标为 0-4
//即数组的下标/索引 最小为0 最大为数组长度-1
int arr5[] = new int[5];
System.out.println(arr5[5]);//数组越界
}
}
public class ArrayExercise01 { //编写一个main函数 public static void main(String[] args) { //1. 创建一个char类型的26个元素的数组,分别放置'A'-'Z' //使用for循环访问所有元素并打印出来 //提示:char类型数据运算 'A' + 1 -> 'B' // //思路分析 //1. 定义一个 数组 char[] chars = new char[26]; //2. 因为'A' + 1 = 'B' 类推,所有使用for来赋值 //3. 使用for循环访问所有元素 char chars[] = new char[26]; for (int i = 0; i < chars.length; i++) {//循环26次 chars[i] = (char)('A' + i);//由于得到的是int类型,因此需要强转成char类型 System.out.print(chars[i] + " "); } } }
public class ArrayExercise02 { //编写一个main函数 public static void main(String[] args) { //2. 请求出一个数组int[]的最大值 {4, -1, 9, 10, 23} 并得到对应的下标 //思路分析 //1. 先定义一个int数组 //2. 假定一个最大值为max = arr[0] //3. 然后遍历比较 int arr[] = {4, -1, 9, 10, 23}; int max = arr[0]; int maxIndex = 0;//得到对应下标,定义存储下标 for (int i = 1; i < arr.length; i++) { if (max < arr[i]) { max = arr[i]; maxIndex = i; } } System.out.println("最大值=" + max); System.out.println("对应的下标=" + maxIndex); } }
int n1 = 2; int n2 = n1;
int arr1[] = {1, 2, 3};
int arr2[] = arr1;
public class ArrayCopy { //编写一个main函数 public static void main(String[] args) { //编写代码 实现数组拷贝(内容复制) //将int arr1[] = {10, 20, 30};拷贝到 arr2数组 //要求:数据空间是独立的 //思路: //创建一个新的数组arr2,开辟一个新的数据空间 //大小跟 arr1.length 相同 int arr1[] = {10, 20, 30}; int arr2[] = new int[arr1.length]; //遍历arr1,把每个元素拷贝到arr2对应的元素位置 for (int i = 0; i < arr1.length; i++) { arr2[i] = arr1[i]; } //输出arr1 System.out.println("===arr1的值==="); for (int i = 0; i < arr1.length; i++) { System.out.println(arr1[i]); } //修改arr2的值 arr2[0] = 100; System.out.println("===arr2的值==="); for (int i = 0; i < arr2.length; i++) { System.out.println(arr2[i]); } } }
public class ArrayReverse { //编写一个main函数 public static void main(String[] args) { //需求:把数组的元素内容翻转 //arr {11,22,33,44,55,66} -> {66,55,44,33,22,11} //思路 //规律: //1. 把arr[0] 和 arr[5] 进行交换 {66,22,33,44,55,11} //2. 把arr[1] 和 arr[4] 进行交换 {66,55,33,44,22,11} //3. 把arr[2] 和 arr[3] 进行交换 {66,55,44,33,22,11} //4. 一共要交换 3 次 = arr.length / 2 //5. 每次交换时,对应的下标是 arr[i] 和 arr[arr.length - 1 - i] // //优化 //老师的写法: int arr[] = {11, 22, 33, 44, 55, 66}; int temp = 0; int len = arr.length; for (int i = 0; i < len / 2; i++) { temp = arr[len - 1 - i];//保存 arr[len - 1 - i] = arr[i]; arr[i] = temp; } //打印 System.out.println("===翻转后数组==="); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } //自己的写法,将其倒着传给另一个数组 //然后再赋给原先的数组 可以直接指向arr2 即 arr = arr2 int arr[] = {11, 22, 33, 44, 55, 66}; int arr2[] = new int[arr.length]; for (int i = arr.length - 1; i >= 0; i--) { //可以增加一个循环变量 j -> 0 -> 5 arr2[arr.length - 1 - i] = arr[i]; } //让arr 指向arr2 的数据空间,此时 arr 原来的数据空间就没有变量引用,会被当作垃圾,销毁 arr = arr2; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
import java.util.Scanner; public class ArrayAdd { //编写一个main函数 public static void main(String[] args) { //要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java //1) 原始数组使用静态分配 int[] arr = {1,2,3} //2) 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4} //思路分析 //1. 定义初始数组 int arr[] = {1,2,3}; //2. arr[3] = 4;//error 由于原先的下标最大为2,这样就会显示下标越界 //3. 定义一个新的数组 int arrNew = new int[arr.length+1]; //4. 遍历arr 数组,依次将arr的元素拷贝到 arrNew 数组 //5. 将 4 赋给 arrNew[arrNew.length - 1] = 4;//把4赋给 arrNew 的最后一个元素 //6. 让arr 指向 arrNew ,那么原来的arr数组就会被销毁 int arr[] = {1, 2, 3}; int arrNew[] = new int[arr.length + 1]; for (int i = 0; i < arr.length; i++) { arrNew[i] = arr[i]; } //把4赋给arrNew的最后一个元素 arrNew[arrNew.length - 1] = 4; //让 arr 指向 arrNew arr = arrNew; //输出arr 看看效果 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } } }
import java.util.Scanner; public class ArrayAdd02 { //编写一个main函数 public static void main(String[] args) { //要求:实现动态的给数组添加元素效果,实现对数组扩容。ArrayAdd.java //1) 原始数组使用静态分配 int[] arr = {1,2,3} //2) 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4} //3) 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n //思路分析 //1. 定义初始数组 int arr[] = {1,2,3}; //2. arr[3] = 4;//error 由于原先的下标最大为2,这样就会显示下标越界 //3. 定义一个新的数组 int arrNew = new int[arr.length+1]; //4. 遍历arr 数组,依次将arr的元素拷贝到 arrNew 数组 //5. 将 4 赋给 arrNew[arrNew.length - 1] = 4;//把4赋给 arrNew 的最后一个元素 //6. 让arr 指向 arrNew ,那么原来的arr数组就会被销毁 //7. 创建一个 Scanner 可以接受用户输入 //8. 因为用户什么时候退出,不确定,使用do-while + break 来控制 Scanner myScanner = new Scanner(System.in); int arr[] = {1, 2, 3}; do { int arrNew[] = new int[arr.length + 1]; for (int i = 0; i < arr.length; i++) { arrNew[i] = arr[i]; } System.out.println("请输入你要添加的元素(int类型)"); int addNum = myScanner.nextInt(); //把addNum赋给arrNew的最后一个元素 arrNew[arrNew.length - 1] = addNum; //让 arr 指向 arrNew arr = arrNew; //输出arr 看看效果 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } //问用户是否继续 System.out.println("是否继续添加:y/n"); char key = myScanner.next().charAt(0); if (key == 'n') {//如果输入n,就结束 break; } } while (true); System.out.println("你退出了添加..."); } }
public class BubbleSort { //编写一个main函数 public static void main(String[] args) { //冒泡排序 - 升序 //化繁为简,先死后活 /* 数组 [24,69,80,57,13] 第 1 轮排序: 目标把最大数放在最后 第 1 次比较[24,69,80,57,13] 第 2 次比较[24,69,80,57,13] 第 3 次比较[24,69,57,80,13] 第 4 次比较[24,69,57,13,80] */ int arr[] = {24, 69, 80, 57, 13}; for (int j = 1; j < arr.length; j++) { for (int i = 0; i < arr.length - j; i++) { if (arr[i] > arr[i+1]) { int temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } }
import java.util.Scanner; public class SeqSearch { //编写一个main函数 public static void main(String[] args) { //) 有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏: //从键盘中任意输入一个名称,判断数列中是否 包含此名称【顺序查找】 //要求: 如果找到了,就提示找到,并给出下标值 //思路分析 //1. 定义一个字符串数组 //2. 接受数组输入,遍历数组,逐一比较,如果发现有,则提示信息,并退出 String names[] = {"白眉鹰王", "金毛狮王", "紫衫龙王", "青翼蝠王"}; Scanner myScanner = new Scanner(System.in); System.out.println("请输入名字"); String findName = myScanner.next(); //遍历数组,逐一比较 // int index = -1; for (int i = 0; i < names.length; i++) { if (findName.equals(names[i])) { System.out.println("恭喜你找到 " + findName); System.out.println("下标为 " + i); //把i保存到index index = i; break;//退出 } } if (index == -1) { System.out.println("没有找到"); } } }
public class TwoDimensionalArray01 { //编写一个main函数 public static void main(String[] args) { //请用二维数组输出如下图形 //0 0 0 0 0 0 //0 0 1 0 0 0 //0 2 0 3 0 0 //0 0 0 0 0 0 //二维数组: //1. 从定义形式上看 int[][] //2. 原来的一维数组的每个元素是一维数组,就构成了二维数组 int arr[][] = {{0, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 2, 0, 3, 0, 0}, {0, 0, 0, 0, 0, 0}}; //关于二维数组的关键概念 //(1) System.out.println("二维数组的元素个数=" + arr.length); //(2)二维数组的每个元素是一维数组,所以如果需要得到每个一维数组的值 // 还需要再次遍历 //(3)如果我们要访问第(i+1)个一维数组的第(j+1)个值,arr[i][j] // 举例:访问3 - arr[2][3] System.out.println(arr[2][3]); //输出二维图形 for (int i = 0; i < arr.length; i++) {//遍历二维数组的每个元素 //遍历二维数组的每个元素(数组) //arr[i] 表示二维数组的第 i+1 个元素,比如 arr[0]:二维数组的第一个元素 //arr[i].length 得到对应的每个一位数组的长度 for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } }
语法:类型[][] 数组名 = new 类型[大小][大小]
比如:int a[][] = new int[2][3];
public class TwoDimensionalArray02 { //编写一个main函数 public static void main(String[] args) { //1. int arr[][] = new int[2][3]; arr[1][1] = 8; //遍历arr数组 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) {//对每个一维数组遍历 System.out.print(arr[i][j] + " "); } System.out.println(); } } }
先声明:类型 数组名[][];
再定义(开辟空间):数组名 = new 类型[大小][大小]
赋值(有默认值,比如 int 类型就是0)
public class TwoDimensionalArray02 { //编写一个main函数 public static void main(String[] args) { //2. //int arr[][];//声明二维数组 //arr = new int[2][3];//再开辟空间 arr[1][1] = 8; //遍历arr数组 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) {//对每个一维数组遍历 System.out.print(arr[i][j] + " "); } System.out.println(); } } }
public class TwoDimensionalArray03 { //编写一个main函数 public static void main(String[] args) { //需求:动态创建一个二维数组 //一共有三个一维数组,每个一维数组的元素是不一样的 int arr[][] = new int[3][];//不确定列数就不写 ,创建 二维数组,但是只是确定了一维数组的个数 //每个一维数组还没有开数据空间 for (int i = 0; i < arr.length; i++) {//遍历arr每个一维数组 //给每个一维数组开空间 new //如果没有给一维数组 new ,那么arr[i] 就是 null arr[i] = new int[i + 1]; //遍历一维数组,并给一维数组的每个元素赋值 for (int j = 0; j < arr[i].length; j++) { arr[i][j] = i + 1;//赋值 } } for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } }
定义 类型 数组名[][] = {{值1, 值2…}, {值1, 值2…}, {值1, 值2…}};
比如:int[][] arr = {{1, 1, 1}, {8, 8, 9}, {100}};
解读:
public class TwoDimensionalArray04 {
//编写一个main函数
public static void main(String[] args) {
int arr[][] = {{1,1,1}, {0,0,0}, {100}};
}
}
public class TwoDimensionalArray05 { //编写一个main函数 public static void main(String[] args) { //需求:int arr[][] = {{4,6}, {1,4,5,7}, {-2}}; //遍历该二维数组,并得到和 int sum = 0; int arr[][] = {{4,6}, {1,4,5,7}, {-2}}; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { sum += arr[i][j]; } } System.out.println(sum); } }
public class YangHui { //编写一个main函数 public static void main(String[] args) { //使用二维数组打印一个10行的杨辉三角 //规律 //1. 第一行有 1 个元素, 第 n 行有 n 个元素 //2. 每一行的第一个元素和最后一个元素都是 1 //3. 从第三行开始, 对于非第一个元素和最后一个元素的元素的值. //arr[i][j] arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; //必须找到这个规律 int arr[][] = new int[10][]; for (int i = 0; i < arr.length; i++) {//遍历arr的每个元素 //给每个一维数组(行)开辟空间 arr[i] = new int[i + 1]; //给每个一维数组赋值 for (int j = 0; j < arr[i].length; j++) { if (j == 0 || j == arr[i].length - 1) { arr[i][j] = 1; } else {//中间的元素 arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; } } } //输出 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j] + " "); } System.out.println(); } } }
int[] x 或者 int x[]
int[][] y 或者 int[] y[] 或者 int y[][]
比如:int map[][] = {{1, 2}, {3, 4, 5}};
由 map[0] 是一个含有两个元素的一维数组,map[1] 是一个含有三个元素的一维数组构成,我们也成为列数不等的二维数组
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。