什么是数组
1.数据是一组具有相同类型和名称的变量的有序集合。
2.组成数组的这些变量称为数组的元素,一个数组可以含有若干元素。
3.数组的下标,用来指出某个元素在数组中的位置。
4.数组中的第一个元素下标默认为0,第二个元素为1,以此类推,如果某一数组有n个元素。则其最大的下标为n-1。
数组的创建
1.数组有两种一种是一维数组,另一种是多维数组。
2.多维数组:是包含一个或多个的数组。
3.在Java中常用的数组有一维数组和二维数组。
一维数组
语法格式:
数据类型[] 数组名 = new 数据类型[长度];
二维数组
语法格式:
数据类型[][] 数组名 = new 数据类型符[长度1][长度2];
例:
一维数组初始化
为数组元素赋初值的语法形式:
数据类型符[] 数组名=new 数据类型符[]{初值列表};
数据类型符[] 数据名={初值列表1};
例:
二维数组初始化
为数组元素赋初值的语法形式:
数据类型符[][] 数组名=new 数据类型符[][]{{初值列表},....,{初始值列表n}};
数据类型符[][] 数据名={{初值列表1},...,{初值列表n}};
例:
数组元素的引用
使用数组名与下标可以唯一确定数组中的某个元素,从而实现对元素的访问。
例如:
在访问数组元素时,要注意不要使下标越界,例如:
否则就会报错
foreach循环
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全替代for语句,任何foreach语句都可以改写为for语句。foreach不是一个关键字,习惯上将这种特殊的for语句称之为foreach语句。
语法格式:
for(数据类型 变量 :数组或集合){
//语句;
}
例:
for与foreach比较
foreach
for
异同点
1.for与foreach都能对数组进行遍历
2.for通过变换数组下标的形式访问数组元素,因此可以改变数组元素的值
3.foreach通过迭代变量的形式读取数组元素,所以不能改变数组元素的值
注意事项:
1.数组下标从0开始,最后一个元素的索引为 length - 1;
2.使用数组时,要确保下标在有效范围内,避免越界异常;
3.在处理大量数据时,可以考虑使用其他数据结构,如 ArrayList、LinkedList;
程序实例
题目一:
用冒泡排序法对5个数按升序进行排序。
冒泡法:将两个相邻的两个数比较,将大的数调到后面。
建立一个一维数组使其循环比较
for(int i=0;i<4;i++){ //比较4轮
for(int j=0;j<4-i;j++){ //每轮的比较次数
if(a[j]>a[j+1]){ //相邻两数进行比较
//.... //两个元素交换
}
}
}
4轮数据替换过程
两个数之间进行比较,若比较数大于被比较数就越往后调,反之则不变,比较下一个数。
源代码:
小结:
1.n个元素需要n-1轮比较,第一轮比较次数为n-1次。随着轮数增加,比较次数递减。。
2.如果需要进行降序排序将比较条件修改为a[j]<a[j+1]。
题目二:
定义一个二维4*3整型数组,使用随机数生成数组元素值(1-100之间),求该数组中最大运输及其所在行下标和列下标。
1.先创建一个二维数组,生成随机数
int[][] arr1 =new int[4][3];
for (int i=0;i<arr1.length;i++){
for(int j=0;j<arr1[i].length;j++){
arr1[i][j] = (int)(Math.random()*100);
}
}
2.打印数组,验证结果
for(int i=0;i<arr1.length;i++){
System.out.println(Arrays.toString(arr1[i]));
}
Location location = locateLargest(arr1);
System.out.println("最大值是:"+"arr1["+location.row+"]["+location.column+"]="+location.maxValue);
3.建立新方法,存储最大值及最大值下标
public static Location locateLargest(int[][] arr){
Location location = new Location();
int row = 0;
int column = 0;
int maxValue = 0;
}
4.遍历数组,获取元素最大值及定位
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] > maxValue) {
row = i;
column = j;
maxValue = arr[i][j];
}
}
}
完整代码:
public class Array {
public static void main(String[] args) {
int[][] arr1 = new int[4][3];
//生成随机数数组
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
arr1[i][j] = (int)(Math.random() * 100);
}
}
//打印数组,方便结果验证
for (int i = 0; i < arr1.length; i++) {
System.out.println(Arrays.toString(arr1[i]));
}
Location location = locateLargest(arr1);
System.out.println("最大值是:" + "arr1[" + location.row + "][" + location.column + "]=" + location.maxValue);
}
//该方法返回的对象包含了最大值以及最大值的下标
public static Location locateLargest(int[][] arr) {
Location location = new Location();
int row = 0;
int column = 0;
int maxValue = 0;
//遍历数组,获取元素中的最大值及其定位
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] > maxValue) {
row = i;
column = j;
maxValue = arr[i][j];
}
}
}
location.row = row;
location.column = column;
location.maxValue = maxValue;
return location;
}
}
class Location {
public int row;
public int column;
public int maxValue;
}
总结:
要熟练掌握for循环来遍历数组中的元素,熟知随机数组的创建方法。