目录
一、数组的练习
1.1. 顺序表查找
1.2. 二分查找
1.3. 冒泡排序
二、二维数组
2.1. 二维数组的性质
2.2. 不规则二维数组
一、数组的练习
1.1. 顺序表查找
题目描述:给定一个数组, 再给定一个元素, 找出该元素在数组中的位置。
利用for循环去遍历数组,找到之后返回下标,没有找到返回-1,代码如下:
public class Main {
public static int Find(int[] arrays,int num){
for(int i=0;i< arrays.length;i++){
if(arrays[i]==num){
return i;
}
}
return -1;
}
public static void main(String[] args) {
int[] arrays={8,7,4,10,25,16,2};
System.out.println(Find(arrays,25));//调用Find方法,传入数组arrays和要查找的元素25
}
}
1.2. 二分查找
二分查找需要建立在一个有序的情况下,数学上我们学过二分法找零点,这个思路相信不用多说。如果这个数组是以升序排列的,元素分别是10,20,30,40,50,代码如下:
public class BinarySearch {
public static int FindVal(int arrays[],int val){
int left = 0;
int right = arrays.length;
while(left<=right){
int mid = (left + right) / 2;
if(val<arrays[mid]){
//去左侧区间查找
right = mid-1;
}else if(val<arrays[mid]){
//去右侧区间查找
left = mid + 1;
}else{
//相等,说明找到了
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] arrays = {10,20,30,40,50,60};
System.out.println(FindVal(arrays,4));
}
}
1.3. 冒泡排序
第一个for循环表示循环的趟数,假设数组里面共有n个元素,那么最多需要循环n-1趟;第二个for循环我要用画图的方式来描述:每比较完一个元素的次数会依次减小,怎么来体现这个减少呢?我们在j=arrays.length-1后面再减去一个i就能实现。
import java.util.Arrays;
public class Main {
public static void BubbleSort(int[] arrays){
for(int i=0;i< arrays.length-1;i++){
for(int j=0;j< arrays.length-1-i;j++){
if(arrays[j]<arrays[j+1]){
int tmp=arrays[j];
arrays[j]=arrays[j+1];
arrays[j+1]=tmp;
}
}
}
}
public static void main(String[] args) {
int[] arrays={20,64,73,5,108,84};
System.out.println("排序前:"+ Arrays.toString(arrays));
BubbleSort(arrays);
System.out.println("排序后:"+Arrays.toString(arrays));
int ret=Arrays.binarySearch(arrays,5);
System.out.println(ret);
}
}
二、二维数组
2.1. 二维数组的性质
二维数组与一维数组的本质是一样的。命名规则有三种:
int[][] array1 = {{1,2,3},{4,5,6}};
int[][] array2 = new int[][]{{1,2,3},{4,5,6}};
int[][] array3 = new int[2][3];//前行后列
与C语言中唯一不同的是,Java中的二维数组可以省略列,但不能省略行(可以实现为不规则二维数组,后面会讲)。二维数组的存储是怎样的?如下图所示,0下标与1下标存的就是两个一维数组的地址。
int[][] array = {{1,2,3},{4,5,6}};
System.out.println(array[0]);
System.out.println(array[1]);
遍历数组打印:
System.out.println(Arrays.toString(array[0]));
System.out.println(Arrays.toString(array[1]));
数组的长度
System.out.println(array[0].length);
System.out.println(array[1].length);
如何确定二维数组的行数与列数呢?代码如下:
int[][] array={{1,2,3},{4,5,6}};
System.out.println(array.length);//确定行数
System.out.println(array[0].length);//确定列数
2.2. 不规则二维数组
前面在二维数组的性质中提到过不规则二维数组, 下面是一个不规则二维数组的例子,运行,会出现如下报错:
int[][] array3 = new int[2][];
for (int i = 0; i < array3.length; i++) {
for (int j = 0; j < array3[i].length; j++) {
System.out.println(array3[i][j]);
}
如果我们进行调试的话,可以看到,列数里面的默认值是null,null不能通过.length去访问,所以就会报错。如下图所示:
但如果我们这样做呢:
int[][] array4=new int[2][];
array4[0] =new int[]{1,2,3,4};
array4[1] =new int[]{5,6,7};
for (int i = 0; i < array4.length; i++) {
for (int j = 0; j < array4[i].length; j++) {
System.out.println(array4[i][j]);
}
}
好,以上就是二维数组的全部内容。