基本数据结构中,数组是很重要的,这篇小猿圈加加对数组详解一席,具体使用,在学习过程中有困惑的朋友,可以看一下加加的这篇文章,看到就是赚到,让我们一起看看吧。
一、数组的基本使用
public class Array01 {
/**
* 数组:一组相同数据类型的集合! 在内存中开辟一连串的空间!
* 和String一样都是 引用数据类型!
* 数据类型 [] 数组名称;
* 数组的下标=数组的长度-1
*/
public static void main(String[] args) {
// 01.声明数组 创建了一个火车厢
int[] nums;
// 02.分配空间 给火车厢创建座位
nums = new int[5];
// 03.赋值 旅客入座
nums[0] = 50;
// 04.使用 nums.length(获取数组的长度)
for (int i = 0; i < nums.length; i++) {
System.out.println("数组nums的第" + (i + 1) + "个位置的数据是:" + nums[i]);
}
}
// 声明数组的同时给数组赋值
@Test
public void test01() {
/**
* 给你说 创建车厢的同时,告诉你里面有多少个座位
*
* int [] nums;
* nums={ 1, 2, 3, 4, 5 }; 这种写法是错误的!
*/
int[] nums = { 1, 2, 3, 4, 5 };
// 找到下标为3的数据
System.out.println(nums[3]);
}
@Test
public void test02() {
// int[] nums = new int[5]; 可以 常用的方式
int[] nums = new int[] { 1, 2, 3, 4, 5 };
// 找到下标为3的数据
System.out.println(nums[3]);
}
/**
* 计算5位学生的平均分
*/
@Test
public void test03() {
// 01.创建一个长度为5的double类型的数组 保存学生成绩
double[] scores = new double[5];
// 02.循环给学生成绩赋值
Scanner scanner = new Scanner(System.in);
double sum = 0; // 保存总成绩
for (int i = 0; i < scores.length; i++) {
System.out.println("请输入第" + (i + 1) + "位同学的成绩");
scores[i] = scanner.nextDouble();
// 每个学生成绩需要加到sum中
sum += scores[i];
}
System.out.println("学生的总成绩是:" + sum);
System.out.println("学生的平均分是:" + (sum / scores.length));
}
/**
* 有一个数列:8,4,2,1,23,344,12
循环输出数列的值
求数列中所有数值的和
猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
*/
@Test
public void test04() {
// 01.创建int类型数组
int nums[] = { 8, 4, 2, 1, 23, 344, 12 };
// 定义变量保存总和
int sum = 0;
// 02.循环输出数列的值
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + ",");
sum += nums[i];
}
System.out.println("\n数组中数值的总和:" + sum);
// 猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
// 定义标记 来记录是否中奖
boolean flag = false;
for (int i = 0; i < nums.length; i++) {
if (num == nums[i]) {
flag = true;
break;
}
}
if (flag) { // 判断标记
System.out.println("恭喜您!中大奖!");
} else {
System.out.println("没有找到......");
}
}
/**
* 以表格的形式输出5笔购物金额及总金额
*/
@Test
public void test05() {
double[] pays = new double[5];
double sum = 0; // 总金额
Scanner scanner = new Scanner(System.in);
System.out.println("请输入本月的消费记录:");
for (int i = 0; i < pays.length; i++) {
System.out.println("请输入" + (i + 1) + "次的消费金额:");
pays[i] = scanner.nextDouble(); // 给数组中每一个元素赋值
// 求和
sum += pays[i];
}
// 输出消费详情 遍历(从集合中取得数据)
System.out.println("序号\t\t金额");
for (int i = 0; i < pays.length; i++) {
System.out.println((i + 1) + "\t\t" + pays[i]);
}
System.out.println("总金额:" + sum);
}
/**
* Arrays :数组的操作类
*/
@Test
public void test06() {
double[] pays = new double[5];
Scanner scanner = new Scanner(System.in);
System.out.println("请输入本月的消费记录:");
for (int i = 0; i < pays.length; i++) {
System.out.println("请输入" + (i + 1) + "次的消费金额:");
pays[i] = scanner.nextDouble(); // 给数组中每一个元素赋值
}
// 没有排序的遍历
for (int i = 0; i < pays.length; i++) {
System.out.println(pays[i]);
}
System.out.println("*************升序之后***************");
Arrays.sort(pays);// 升序排列
for (int i = 0; i < pays.length; i++) {
System.out.println(pays[i]);
}
}
}
二、操作数组的工具类
/**
* 操作数组的工具类!
*/
public class Arrays02 {
// equals(arr1, arr2) :比较两个数组的内容和长度 是否一致
@Test
public void testEquals() {
int[] nums1 = { 10, 20, 30, 50 };
int[] nums2 = nums1;
int[] nums3 = { 10, 20, 30 };
System.out.println("nums1与nums2比较:" + Arrays.equals(nums1, nums2));
System.out.println("nums1==nums2比较:" + (nums1 == nums2));
}
// sort(arr):对数组中的元素进行升序的排列
@Test
public void testSort() {
int[] nums = { 10, 50, 30, 20 };
Arrays.sort(nums);
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
/**
* toString :把一个数组变成字符串
* [10, 50, 30, 20] 集合toString的结果!
*/
@Test
public void testToString() {
int[] nums = { 10, 50, 30, 20 };
System.out.println(Arrays.toString(nums));
}
/**
* fill(arr,val):将arr数组中的所有元素都赋值成了val
*/
@Test
public void testFill() {
int[] nums = { 10, 50, 30, 20 };
System.out.println(Arrays.toString(nums));
Arrays.fill(nums, 100);
System.out.println(Arrays.toString(nums));
}
/**
* copyOf(arr,length):将数组arr复制成一个长度为length的新数组!
*/
@Test
public void testCopyOf() {
int[] nums = { 10, 50, 30, 20 };
int[] nums1 = Arrays.copyOf(nums, 3);
System.out.println(Arrays.toString(nums1));
}
/**
* binarySearch(arr,val):查询val在arr数组中的下标!
* 必须先升序排列! Arrays.sort(arr)!!!!
*/
@Test
public void testBinarySearch() {
int[] nums = { 10, 50, 30, 20 };
Arrays.sort(nums); // 10 20 30 50
System.out.println(Arrays.binarySearch(nums, 50));
}
}
三、多重数组
public class DoubleArray04 {
public static void main(String[] args) {
int[] clazz = new int[3]; // 保存班级
int[] students = new int[5]; // 保存学生
}
@Test
public void test01() { // 声明的同时开辟空间
int[][] nums = new int[3][5]; // 3个班级各5名学生
}
@Test
public void test02() { // 先声明 再 开辟空间
int[][] nums;
nums = new int[3][5]; // 3个班级各5名学生
}
@Test
public void test03() { // 声明 开辟空间的同时赋值
int[][] nums = { { 1, 2, 3, 4, 5 }, { 1, 2, 3, 4, 5 },
{ 1, 2, 3, 4, 5 } };
System.out.println(nums.length);// 3个班级各5名学生
}
@Test
public void test04() {
int[][] nums = new int[3][5]; // 3个班级各5名学生
// 第二个班级的第三个学生
nums[1][2] = 50;
}
@Test
public void test05() {
int[][] nums = { { 1, 2, 3 }, { 10, 20, 30 }, { 100, 200, 300 } };
/**
* nums.length 车厢数
* nums[i].length 车厢中的座位数
* 双重循环:
* 外层循环执行一次,内存循环执行一遍!
*/
for (int i = 0; i < nums.length; i++) {
System.out.println("进入了第" + (i + 1) + "个车厢**********");
if (i == 2) {
break; // 跳出当前循环体
}
for (int j = 0; j < nums[i].length; j++) {
if (j == 2) {
break; // 跳出当前循环体
}
System.out.println(nums[i][j]);
}
}
}
/**
* 所有的引用数据类型如果没有实例化(开辟空间)! 不能使用!
* 因为引用数据类型的默认值 是 null!
*/
@Test
public void test06() {
int[][] nums = new int[5][];
System.out.println(nums.length);
nums[0] = new int[5]; // 开辟空间
nums[1] = new int[6];
nums[0][0] = 50; // 使用
nums[0][1] = 60;
nums[0][2] = 70;
nums[0][3] = 80;
System.out.println(nums[0].length);
System.out.println(nums[1].length);
}
}
四、二维数组
/**
* 二维数组: 数组中的元素 又是一个数组!
*/
@Test
public void test06(){
//01.创建二维数组
int[][] nums=new int[3][3]; //int [][] nums2={{1,2,3},{4,5,6},{7,8,9}};
nums[0][0]=5;
nums[0][1]=6;
nums[0][2]=7;
nums[1][0]=5;
nums[1][1]=6;
nums[1][2]=7;
nums[2][0]=5;
nums[2][1]=6;
nums[2][2]=7;
}
@Test
public void test07(){
//01.创建二维数组
int [][] nums={{1,2,3,4},{4,5,6},{7,8}};
System.out.println(nums[0]);//{1,2,3}
System.out.println(nums[0][1]);//2
System.out.println("nums的长度:"+nums.length);
System.out.println("第2个数组中下标是2的元素"+nums[1][2]);
}
/**
* 循环打印出数组所有的元素
*/
@Test
public void test08(){
//01.创建二维数组
int [][] nums={{1,2,3,4},{4,5,6},{7,8}};
for (int i = 0; i < nums.length; i++) { //外层
System.out.println("这是2维数组中的第"+(i+1)+"个数组");
for (int j = 0; j < nums[i].length; j++) {//内层
System.out.println("元素的值:"+nums[i][j]);
}
}
}
数组的详解具体就是上面这些,大家可以好好练习一下,针对数组一定要会变通,会写二维数组、用数组实现冒泡排序等等,一定要掌握,重中之重,小编认为这篇数组讲的还算详细、清晰,希望大家看后可以好好保存,也可以去小猿圈学习通过视频,一个免费的学习平台。