文章目录
前言
在Java中有一个重要的技术,数组。那什么是数组呢?数组,相当于一个容器,用来存储同一批类型的数据的。一般来说储存批量的数据,使用数组更为方便。
一、数组的定义
数组的两种初始化的方式:静态初始化、动态初始化。
//静态初始化标准格式:
数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3};
//定义数组,用来存储多个年龄
int[] ages = new int[]{12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = new double[]{89.9, 99.5, 59.5, 88.0};
//静态初始化简化格式
数据类型[] 变量名 = {元素1,元素2,元素3};
//定义数组,用来存储多个年龄
int[] ages = {12, 24, 36}
//定义数组,用来存储多个成绩
double[] scores = {89.9, 99.5, 59.5, 88.0};
//以下两种写法是等价的。但是建议大家用第一种,因为这种写法更加普遍
int[] ages = {12, 24, 36};
int ages[] = {12, 24, 36}
动态初始化:不需要写出具体的元素,而是指定元素类型和长度。
注意: 使用动态初始化定义数组时,根据元素类型不同,默认值也有所不同。
int byte short long char---->0
boolean---->false
float double—>0.0
引用类型。String—>null
//动态初始化语法: 数据类型[] 数组名 = new 数据类型[长度]
int[] arr = new int[3];
/*案例需求:
某歌唱比赛,需要开发一个系统:可以录入6名评委的打分,录入完毕后立即输出平均分作为选手得分。*/
public class Test {
public static void main(String[] args) {
//语法: 数据类型[] 数组名=new 数据类型[长度]
double[] arr=new double[6];
//控制台输入分
Scanner sc=new Scanner(System.in);
for(int i=0;i<arr.length;i++){
System.out.println("录入第"+(i+1)+"位评委的成绩");
double score = sc.nextDouble();
//把上面输入的分数赋值给数组
arr[i]=score;
}
//遍历数组请求数组中所有元素的和
double sum=0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
System.out.println("平均值:"+sum/arr.length);
}
}
二、数组的元素访问及修改
数组中存储的数据我们叫做元素;而且数组中的每一个元素都有一个编号与之对应,我们把这个编号叫做索引,这个索引是从0依次递增的整数。
2.1 访问数组元素
//数组名可以找到数组对象的地址,再通过索引就可以定位到具体的元素
数组名[索引]
/索引: 0 1 2
int[] arr = {12, 24, 36};
// 1、访问数组的全部数据
System.out.println(arr[0]); //12
System.out.println(arr[1]); //24
System.out.println(arr[2]); //36
//下面代码没有3索引,会出现ArrayIndexOutOfBoundsException 索引越界异常
System.out.println(arr[3]);
2.2 修改数组中数据
// 修改数组中的数据
数组名[索引] = 新数据
arr[0] = 66;
arr[2] = 100;
System.out.println(arr[0]); //66
System.out.println(arr[1]); 0
System.out.println(arr[2]); //100
2.3 获取数组元素个数(数组的长度)
除访问数组中的元素,我们也能获取数组中元素的个数,统称为数组的长度。
在数组名的后面加.length
int[] arr = {12, 24, 36};
数组中元素的个数: 数组名.length ===数组中元素的个数
System.out.println(arr.length);
数组的长度不等于数组的最大索引
数组的最大索引=数组的长度-1(arr.length-1)
2.4 循环访问数组元素
利用数据长度,我们可以通过循环的方式去获取数组内的元素
int[] arr={1,9,10,2,5,11};
for(int i=0;i<arr.length;i++){ //注意: 索引不能等于数组长度
System.out.println(arr[i]);
}
三、生成随机数
生成随机数的功能,在JDK中提供了一个类叫做Random,我们只需要调用Random这个类就可以生成随机数。
注意: nextInt(n)功能只能生成 0~(n-1)之间的随机数,不包含n.
import java.util.Random;
//导包。import java.util.Random; (idea会自动完成)
public class RandomDemo1 {
public static void main(String[] args) {
// 2、创建一个Random对象,用于生成随机数。
Random r = new Random();
// 3、调用Random提供的功能:nextInt得到随机数。
for (int i = 1; i <= 20; i++) {
int data = r.nextInt(10); // 0 - 9
System.out.println(data);
}
}
}
//随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中 结束游戏
import java.util.Random;
import java.util.Scanner;
public class RandomTest {
public static void main(String[] args) {
// 1、随机产生一个1-100之间的数据,做为中奖号码。
Random r = new Random();
int luckNumber = r.nextInt(100) + 1;
// 2、定义一个死循环,让用户不断的猜测数据
Scanner sc = new Scanner(System.in);
while (true) {
// 提示用户猜测
System.out.println("请您输入您猜测的数据:");
int guessNumber = sc.nextInt();
// 3、判断用户猜测的数字与幸运号码的大小情况
if(guessNumber > luckNumber){
System.out.println("您猜测的数字过大~~");
}else if(guessNumber < luckNumber){
System.out.println("您猜测的数字过小~~");
}else {
System.out.println("恭喜您,猜测成功了");
break; // 结束死循环
}
}
}
}
四、数组运用
4.1查找数组中最大值和最小值
public class Test {
public static void main(String[] args) {
//求该数组中最大的元素
int[] arr={10,23,43,23,56,67,12,56,67,32};
//冒泡法
int tmp=arr[0];
//遍历
for(int i=0;i<arr.length;i++){
if(tmp<arr[i]){
tmp=arr[i];
}
}
System.out.println("最大值:"+tmp);
}
}
4.2数组排序-选择排序
public class Test {
public static void main(String[] args) {
int[] arr={10,23,43,23,1,67,12,56,67,3};
for(int i=0;i<arr.length;i++){//排序的次数
for(int j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
//交换位置
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
}
}
System.out.println("排好序的数组="+Arrays.toString(arr));
}
}
4.3查找某个数据
public static void main(String[] args) {
int[] arr={10,23,43,23,1,67,12,56,67,3};
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要查找的数:");
int num=sc.nextInt();
boolean flag=false;//表示不存在
for(int i=0;i<arr.length;i++){
if(num==arr[i]){
flag=true;
break;
}
}
if(flag==true){
System.out.println(num+"在数组中");
}else{
System.out.println(num+"不在数组中");
}
}
**数组的二分查找:**用二分查找的方式查找数据需要该数组必须为排好序的数组。
public class Test {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
int num=5;
//声明最小数的索引
int min=0;
//声明最大数的索引
int max=arr.length-1;
//声明一个标志变量 false表示该数在数组中不存在 true表示该数在数组中存在
boolean flag=false;
while (min<=max){
//声明中间数的索引
int mid=(min+max)/2;
if(arr[mid]>num){
//你要查找的数比中间数小,在中间数的左边查找,
max=mid-1;
}else if(arr[mid]<num){
min=mid+1;
}else{
//中间数和我们要找的数相同
flag=true;
break;
}
}
if(flag==true){
System.out.println("你要查找的数组在数组中");
}else{
System.out.println("不在");
}
}
}
4.4数组元素倒置
所谓的元素倒置就是数组内元素位置互换,最后一个元素换到第一个元素的位置;倒数第二个元素与顺数第二个元素互换,依此类推。
public class Test {
public static void main(String[] args) {
int [] arr={1,2,5,4,6,7};
for(int i=0;i<arr.length/2;i++){
//i=0 arr[0] arr[arr.length-1-0]
//i=1 arr[1] arr[arr.length-1-1]
//i=2 arr[2] arr[arr.length-1-2]
// arr[i] arr[arr.length-1-i]
int tmp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=tmp;
}
System.out.println("交换完成后="+Arrays.toString(arr));
//交换后结果[7,6,4,5,2,1]
}
}
五、增强循环-foreach
增强循环foreach有区别于for循环
/*语法结构
for(数据类型 变量名:数组名){
//使用变量
}
*/
public class Test {
public static void main(String[] args) {
String [] arr={"胡三汉","令狐冲","欧晓","张三"};
//根据索引循环
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
System.out.println("\n=====增强循环=====");
for (String s : arr) {
System.out.print(s+"\t");
}
}
}
六、Arrays工具类
在java中提供了一个对数据操作的工具类-Arrays.里面包含很多对数组操作的方法。比如: 排序,二分查找,复制数组,把数组转化为字符。
6.1 排序—sort
//用法:Arrays.sort(数组名)
public class Test {
public static void main(String[] args) {
int [] arr={1,7,2,6,5,4};
Arrays.sort(arr);//工具。
System.out.println("排序好后="+Arrays.toString(arr));
}
}
6.2 二分查找—binarySearch()
//用法: Arrays.binarySearch(数组名,查找的数);
public class Test {
public static void main(String[] args) {
int [] arr={1,2,3,4,5,6,7,8,9}; //排序好
int num=1;
//完成二分查找并返回你查找到数据的索引.如果没有找到返回小于0数
int i = Arrays.binarySearch(arr, num);
if(i<0){
System.out.println("你要查找的数字不在数组中");
}else{
System.out.println("找到你要的数据:"+i);
}
}
}
6.3 数组转化为字符串-toString()
//用法: Arrays.toString(数组名);
public class Test {
public static void main(String[] args) {
int [] arr={1,2,3,4,5,6,7,8,9}; //排序好
System.out.println(arr);
System.out.println(Arrays.toString(arr)); //打印数组对象
}
}
6.4 复制并扩容数组—copyOf
//用法: Arrays.copyOf(数组名,新数组的长度);
public class Test {
public static void main(String[] args) {
int [] arr={1,2,3,4,5,6,7,8,9}; //排序好
int [] arr2=Arrays.copyOf(arr,arr.length*2);
//把arr中的内容复制到新数组中,并且新数组的长度是arr长度2倍
System.out.println(Arrays.toString(arr2));
}
}
总结
以上就是本章要讲的内容,本文简单介绍了数组和Arrays工具类的使用,在文章中只是简单的列举常用的数组方法和Arrays工具类中常用的工具类。Arrays工具类提供了大量能使我们快速便捷地处理数组元素的方法。