数组的定义:
概念:同一种类型的集合,其实数组是一个容器。
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素。
一维数组
格式1: 元素类型 [ ] 数组名 = new 元素类型(元素个数或数组长度);
eg: int [ ] arr = new int [5];
格式2: 元素类型 [ ] 数组名 = new 元素类型[] (元素1,元素2,。。。。);
eg: int [ ] arr = new int [ ] (35,7);
int[ ] arr = {3,5,17};
二维数组
二维数组需要用到多维数组,多维数组可以简单地理解为在数组中嵌套数组。
格式1:int[][] arr = new int[3][4];
上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组
格式2:int[][] arr = new int[3][];
第二种方式和第一种类似,只是数组中每个元素的长度不确定
格式3:int[][] arr = {{1,2},{3,4,5,6},{7,8,9}};
二维数组中定义了三个元素,这三个元素都是数组,分别为{1,2}、{3,4,5,6}、{7,8,9}
数组使用的前提
1.存入数组:前提:有剩余的长度
录入5个学生的成绩,求平均值
public class ArrayDemo {
public static void main(String[] args) {
//要求用户动态录入5个学生的成绩,求平均值
Scanner input = new Scanner(System.in);
// double[] scores = new double[5]; //sizeof(scores) /sizeof(double)
final int N =10;
double[] scores = new double[10];
double sum = 0, avg; //总成绩的平均值
for (int i = 0; i< scores.length; i++) {
System.out.println(“请输入第”+ (i+1) + “位同学的成绩:”);
scores[i] = input.nextDouble();//重点语句!
}
// 计算总成绩
for (int i = 0; i < scores.length; i++) {
//System.out.println(scores[i]);//经典代码
sum += scores[i];
}
System.out.printf("%d位同学的平均成绩:%。2f",scores.length,sum/scores.length);
洗牌
public class ShuffleCardsDemo {
public static void main(String[] args) {
final int N = 52;
String[] cardColors = {“黑桃”,“红心”,“方块”,“梅花”};
// 牌面数组
String [] cardsValues= {
“A”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”
};
//52张牌
int[] cards = new int[N];
for (int i = 0; i < cards.length; i++) {
cards[i]=i;//牌面与循环变量的值一致。0-51之间
}
System.out.println("洗牌前:");
for (int i = 0; i < cards.length; i++) {
System.out.print(cards[i]);
if((i+1)%13 == 0) {
System.out.println();
}else {
System.out.print(",");
}
}
// 洗牌,随机生成0-51之间的数字newIndex,cards[i]和cards[newIndex]元素相交换
for (int i = 0; i < cards.length; i++) {
int newIndex =(int)(Math.random()*N);//0-51之间随机数字
int temp = cards[i];
cards[i] = cards[newIndex];
cards[newIndex] = temp;
}
System.out.println("洗牌后:");
for (int i = 0; i < cards.length; i++) {
// System.out.print(cards[i]);
System.out.printf("%s-%s",cardColors[cards[i] / 13],cardsValues[cards[i] %13]);
if((i+1)%13 == 0) {
System.out.println();
}else{
System.out.print(" , ");
}
}
}
}
数组必须声明数组变量,才能在程序中使用数组
一、java语言使用new操作符合创建数组
arrayRefVar =new dataType[arraySize];
1).使用dataType[arraySize]创建了一个数组。
2).把新创建的数组的应用赋值给变量arrayRefVar。
二、数组变量,和创建的数组可以用一句完成。
dataType[] arrayRefvar = new dataType[arraySize];
三、使用如下方式创建数组
dataType arrayRefVar = {value0,value1,。。。,valueK};
数组的元素是通过索引访问的。数组索引从0开始,所以索引值0到arrayRefVar.length-1.
多维数组
多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素多是一个一位数组,
String str[ ][ ] = new String[3][4];
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
具体说明请查看下表:
1
public static int binarySearch(Object[] a, Object key)
用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
2
public static boolean equals(long[] a, long[] a2)
如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
3
public static void fill(int[] a, int val)
将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
4
public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。
来源:CSDN
作者:加燕
链接:https://blog.csdn.net/m0_46207738/article/details/104226105