Java基础-数组

本文详细介绍了Java中一维和二维数组的概念、创建、访问和应用,包括数组的初始化、赋值、遍历以及常见操作,如计算数组总和、平均值、查找最大值及其索引等。同时,通过案例展示了数组在处理数据时的便利性,以及如何动态创建和操作二维数组。
摘要由CSDN通过智能技术生成

数组

一维数组

数组可以存放多个同一类型的数据。数组也是一种数据类型, 是引用类型。

快速入门

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
// 一个养鸡场有6只鸡,它们的体重分别是3kg, 5kg, 1kg,3.4kg,2kg,50kg。请问这只鸡的总体重是多少?平
// 均体重是多少?请你编一个程序。
		double hen1=3;
		double hen2=5;
		double hen3=3.4;
		double hen4=2;
		double hen5=50;
		double sum=hen1+hen2+hen3+hen4+hen5;
		System.out.println("sum="+sum);
		System.out.println("avg="+(sum/5));
	}
}
运行结果

在这里插入图片描述

分析

过程太麻烦,如果数量翻一个数量级更麻烦,所以可以用数组解决。

数组解决
import java.util.Scanner;
public class hello{
	public static void main(String[] args){
// 一个养鸡场有6只鸡,它们的体重分别是3kg, 5kg, 1kg,3.4kg,2kg,50kg。请问这只鸡的总体重是多少?平
// 均体重是多少?请你编一个程序。
		double[] hens={3,5,1,3.4,2,50};
		double sum=0;
		for(int i=0;i<hens.length;i++){
			sum+=hens[i];
		}
		System.out.println("sum="+sum);
		System.out.println("avg="+(sum/5));
	}
}

运行结果

在这里插入图片描述

定义语法

  1. 数据类型 数组名[]=new 数据类型[大小];

    ​ int a[]=new int[10];

  2. 数据类型 数组名[];或者数据类型[]数组名;

    ​ 数组名=new数据类型[大小];

    ​ int a[];或者int[] a;

    ​ a=new int[10];

  3. 数据类型 数组名[]= {元素值,元素值…};

    ​ int a[]={2,5,6,7,8,89,90,34,56};

访问数组元素的方式

数组名[下标/索引] 比如:你要使用a数组的第3个数a[2]

代码演示

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
// 案例一:循环输入5个成绩,保存到double数组,并输出
		//第一种定义方式
		// double num[]=new double[5];
		//第二种定义方式
		double num[]; //或者 double[] num;
		num =new double[5];
		for(int i=0;i<num.length;i++){
			num[i]=input.nextDouble();
		}
		for(int i=0;i<num.length;i++){
			System.out.print(num[i]+"\t");
		}
		//第三种定义方式
		double num1[]={1,2,3,4,5};
		for(int i=0;i<num.length;i++){
			System.out.print(num1[i]+"\t");
		}
	}
}

运行结果

在这里插入图片描述

使用细节

  1. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
  2. 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
  3. 数组创建后不赋值默任值 int 0, short 0, byte 0, long 0, float 0.0,double 0.0, char \u0000,boolean false, String null
  4. 使用数组的步骤: 1.声明数组并开辟空间 2.给数组各个元素赋值 3. 使用数组
  5. 数组的下标是从0开始的。
  6. 数组下标必须在指定范围内使用,否则报:下标越界异常,比如int [] arr=new int[5];则有效下标为0-4
  7. 数组属引用类型,数组型数据是对象(object)

应用案例

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
// 案例一:创建一个char类型的26个元素的数组,分别放置'A'-'Z。使用for循环访问所有元素并打印出来。
// 提示: char类型数据运算'A'+ 1 - >B'
		char charcters[]=new char[26];
		for(int i=0;i<charcters.length;i++){
			charcters[i]=(char)('A'+i);
		}
		for(int i=0;i<charcters.length;i++){
			System.out.print(charcters[i]+"\t");
		}
		System.out.println();
// 案例二:请求出一个数组int[]的最大值{4,-1,9, 10,23},并得到对应的下标。
		int nums[]={4,-1,9,10,23};
		int max=nums[0],index=0;
		for(int i=1;i<nums.length;i++){
			if(nums[i]>max){
				max=nums[i];
				index=i;
			}
		}
		System.out.println("max="+max+" index="+index);
	}
}

运行结果

在这里插入图片描述

赋值机制

基本数据类型赋值,值改变两者相互不影响。数组在默认情况下是引用传递,赋的值是地址。会受影响。

代码演示
import java.util.Scanner;
public class hello{
	public static void main(String[] args){
		Scanner input=new Scanner(System.in);
		int n1=100;
		int n2=n1;
		n2=50;
		System.out.println(n1+"\t"+n2);
		int n3[]={1,2,3};
		int n4[]=n3;
		n4[2]=100;
		System.out.println(n3[2]+"  "+n4[2]);
	}
}
运行结果

在这里插入图片描述

应用案例

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
		Scanner input =new Scanner(System.in);
// 案例一:数组拷贝
		int num3[]={1,2,3};
		int num4[]=new int[3];
		for(int i=0;i<num3.length;i++){
			num4[i]=num3[i];
		}
		for(int i=0;i<num4.length;i++){
			System.out.print(num4[i]+"\t");
		}
		System.out.println();
// 案例二:数组反转
		int num1[]={1,2,3};
		for(int i=0;i<num1.length;i++){
			System.out.print(num1[i]+"\t");
		}
		System.out.println();
		int temp=0;
		for(int i=0;i<num1.length;i++){
			temp=num1[i];
			num1[i]=num1[num1.length-1-i];
			num1[num1.length-1-i]=temp;
		}
		for(int i=0;i<num1.length;i++){
			System.out.print(num1[i]+"\t");
		}
// 案例三:数组添加
		while(true){
			System.out.print("是否添加元素?(y/n):");
			char choice=input.next().charAt(0);
			if(choice=='y'){
				System.out.print("请输入你要添加的元素:");
				int newn=input.nextInt();
				int newnum[]=new int[num1.length+1];
				for(int i=0;i<num1.length;i++){
					newnum[i]=num1[i];
				}
				newnum[num1.length]=newn;
				num1=newnum;
			}else{
				for(int i=0;i<num1.length;i++){
					System.out.print(num1[i]+"\t");
				}
				break;
			}
		}
	}
}

运行结果

在这里插入图片描述

二维数组

快速入门

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
		Scanner input =new Scanner(System.in);
// 请用二维数组输出如下图形
	// 000000
	// 001000
	// 020300
	// 000000
// 
//什么是二维数组:
//1. 从定义形式上看int[][ ]
//2. 可以这样理解,相当于一维数组垒在了一起,每个一维数组的长度可以不一样。
		int[][] arr = {{0,0,0,0,0,0},{0,0,1,0,0},{0,2,0,3,0,0},{0,0,0,0,0,0}};
		//输出二维图形
		for(int i = 0; i < arr.length; i++) {//遍历二维数组的每个元素
		//遍历二维数组的每个元素(数组)
			//1. arr[i] 表示二维数组的第i+1个元素比如arr[0] :二维数组的第一个元素
			//2. arr[i].length 得到对应的每个一维数组的长度
			for(int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j]); //输出了一维数组
			}
			System.out.println();//换行
		}
	}
}

运行结果

在这里插入图片描述

定义语法

  1. 数据类型 数组名[] []=new 数据类型[大小] [大小];

    ​ int a[] []=new int[10] [10];

  2. 数据类型 数组名[] [];或者数据类型[] []数组名;

    ​ 数组名=new数据类型[大小] [大小];

    ​ int a[] [];或者int[] [] a;

    ​ a=new int[10] [10];

  3. 数据类型 数组名[] []= {一维数组,一维数组…};

    ​ int a[] []={{2,5,6},{7,8,8},{9,90,3},{4,5,6}};

代码演示

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
		Scanner input =new Scanner(System.in);
// 		看一个需求:动态创建下面二维数组,并输出
// 			i=0:1
// 			i=1:2	2
// 			i=2:3	3	3
// 一个有三个一维数组,每个一维数组的元素是不一样的
		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;
			}
		}
	}
}

内存图解

在这里插入图片描述

案例练习

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
// 案例一:int arr[][]={{4,6},{1,4,5,7},{-2}};遍历该维数组,并得到和
		int arr[][]={{4,6},{1,4,5,7},{-2}};
		int sum=0;
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				sum+=arr[i][j];
				System.out.print(arr[i][j]+"\t");
			}
		}
		System.out.println();
		System.out.println(sum);
	}
}

运行结果

在这里插入图片描述

杨辉三角

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
//打印杨辉三角
		Scanner input =new Scanner(System.in);
		System.out.print("请输入一个整数:");
		int num=input.nextInt();
		int[][] yangHui = new int[num][] ;
		for(int i = 0; i < yangHui.length; i++) {//遍历yangHui的每个元素
			//给每个一维数组(行)开空间
			yangHui[i] = new int[i+1] ;
			//给每个一维数组(行)赋值
			for(int j = 0; j < yangHui[i].length; j++){
				//每一行的第一个元素和最后一个元素都是1
				if(j == 0||j == yangHui[i].length - 1) {
					yangHui[i][j] = 1;
				} else {//中间的元素
					yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j -1] ;
				}
			}
		}
		for(int i=0;i<yangHui.length;i++){
			for(int j=0;j<yangHui[i].length;j++){
				System.out.print(yangHui[i][j]+"\t");
			}
			System.out.println();
		}
	}
}

运行结果

在这里插入图片描述

课后练习

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
// 声明: int[] x,y[];以下选项允许通过编译的是(): 
// a) x[0] = y;//不允许
// b) y[0] = x;//允许
// c y[0][0] = X;//不允许
// d) x[0][0] = y;//不允许
// e) y[0][0] = x[0];//允许
// f)x =y; //不允许
	}
}

使用细节

  1. 一维数组的声明方式有:

    int[] x或者int x[]

    二维数组的声明方式有:

    int[][] y或者int[] y[] 或者int y[]I[]

  2. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如: map[][]是一个二维数组map[] [] = {{1,2},{3,4,5}},由map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的维数组构成,我们也称为列数不等的二维数组。

本章作业

import java.util.Scanner;
public class hello{
	public static void main(String[] args){
// 1.下面数组定义正确的有   BD
// A. String strs[] = { 'a','b', 'c'};
// B. String[] strs = {"a","b","c"};
// C. String[] strs = new String{"a""b""c"};
// D. String strs[] = new String[]{"a","b","c"};
// E. String[] strs = new String[3]{"a","b","c"};
// 2.写出结果   blue
// String foo= "blue";
// boolean[] bar= new boolean[2];
// if(bar[0]){
// 	foo= "green";
// }
// System.out.println(foo);
// 3.以下Java代码的输出结果为:
//								1
//								3
//								5 
// int num= 1;
// while(num < 10) {
	// System.out.println(num);
	// if(num>5) {
	// 	break;
	// }
	// num+= 2;
// }
// 4.已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序,比如:
// [10, 12,45,90],添加23后,数组为[10,12,23, 45,90]\
		// int arr[]={10,12,45,90};
		// Scanner input=new Scanner(System.in);
		// System.out.print("请输入要插入的元素:");
		// int num=input.nextInt();
		// int newarr[]=new int[arr.length+1];
		// int j=1;
		// int x=0;
		// for(int i=0;i<newarr.length;i++){
		// 	if(num>arr[x]||j==0){
		// 		newarr[i]=arr[x];
		// 		x+=1;
		// 	}else{
		// 		newarr[i]=num;
		// 		j-=1;
		// 	}
		// }
		// arr=newarr;
		// for(int i=0;i<arr.length;i++){
		// 	System.out.print(arr[i]+"\t");
		// }
// 5.随机生成1 0个整数(1100的范围)保存到数组,并倒序打印以及求平均值、求最大值和最大值的下标
// 并查找里面是否有8 
		int arr[]=new int[10];
		for(int i=0;i<arr.length;i++){
			arr[i]=(int)(Math.random()*100);
		}
		int maxindex=0;
		int max=arr[0];
		double sum=0;
		int yes=0;
		for(int i=arr.length-1;i>0;i--){
			System.out.print(arr[i]+"\t");
			sum+=arr[i];
			if(arr[i]>max){
				max=arr[i];
				maxindex=i;
			}
			if(arr[i]==8){
				yes=1;
			}
		}
		System.out.println();
		if(yes==1){
			System.out.println("里面有8");
		}
		
		System.out.println("max="+max+"maxindex="+maxindex+"avg="+(sum/arr.length));
// 6.试写出以下代码的打印结果:a,a
// 							z,z
// 							韩,韩
// 							c,c
// char[] arr1={'a','z','b','c'};
// char[] arr2=arr1;
// arr1[2]= '韩';
// for(int i=0;i < arr2.length; i++){
// 	System.out.println(arr1[i]+","+ arr2[i);
// }
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XZY-SUNSHINE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值