//遍历二维数组
for(int i = 0;i < arr.length;i++){
	for(int j = 0; j < arr[i].length;j++){
        sout(arr[i][j]);
    }
    sout(); 
}

数组练习2

public class ArrayExer1 {
    public static void main(String[] args) {
        int arr[][] = new int[][]{{3,5,8},{12,9},{7,0,6,4}};

        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.println("所有元素的总和为:" + sum);
    }
}

练习3

package array;

/**
 * @Author: jt
 * @Date: 2022/3/28 21:59
 * @Version 1.0
 */
public class YangHuiTest {
    public static void main(String[] args) {
        //1.声明并初始化二维数组
        int[][] yangHui = new int[10][];
        //2.给数组的元素赋值
        for (int i =0;i<yangHui.length;i++){
            yangHui[i] = new int[i + 1];

            //2.1给首末元素赋值
            yangHui[i][0] = 1;
            yangHui[i][i] = 1;
            //2.2给每行的非首末元素赋值
            //if (i > 1){
                for (int j = 1; j < yangHui[i].length - 1;j++){
                    yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j];
              //  }
            }

        }
        //3.遍历二维数组
        for (int i = 0; i <yangHui.length;i++){
            for (int j = 0;j < yangHui[i].length;j++){
                System.out.println(yangHui[i][j] + " ");
            }
            System.out.println();
        }
    }
}

1.数组中涉及的常见算法

  • 数组元素的赋值(杨辉三角、回形数)
  • 求数值型数组中元素的最大值、最小值、平均数、总和等
  • 数组的复制、反转、查找(线性查找、二分法查找)
  • 数组元素的排序算法

练习5

package array;

/**
 * @Author: jt
 * @Date: 2022/3/28 22:47
 * @Version 1.0
 */
public class ArrayExer2 {
    public static void main(String[] args) {
        int[] arr = new int[10];

        for(int i = 0;i < arr.length;i++){
            arr[i] = (int)(Math.random() * (99 - 10 + 1) + 10);
        }

        //遍历
        for (int i = 0; i < arr.length;i++){
            System.out.println(arr[i] + "\t");
        }
        //求数组元素的最大值
        int maxValue = arr[0];
        for (int i = 0; i < arr.length;i++){
            if (maxValue < arr[i]){
                maxValue = arr[i];
            }
        }
        System.out.println("最大值为:" + maxValue);
        //求数组元素的最小值
        int minValue = arr[0];
        for (int i = 0; i < arr.length;i++){
            if (minValue > arr[i]){
                minValue = arr[i];
            }
        }
        System.out.println("最小值为:" + minValue);
        //求数组元素的总和
        int sum = 0;
        for (int i = 0; i< arr.length;i++){
            sum += arr[i];
        }
        System.out.println("总和为:" + sum);
        //求数组元素的平均数
        int avgValue = sum / arr.length;
        System.out.println("平均数为:" + avgValue);
    }
}

练习6

package array;

/**
 * @Author: jt
 * @Date: 2022/3/28 23:17
 * @Version 1.0
 */
/*
使用简单数组
    (1)创建一个名为ArrayExer3的类,在main()方法中声明array1和array2两个变量,
    他们是int[]类型的数组。
    (2)使用大括号f,把array1初始化为8个素数:2,3,5,7,11,13,17,19。
    (3)显示array1的内容。
    (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。
    打印出array1.
    思考:array1和array提什么关系?
          答:他俩地址值相同,都指向了堆内存中的唯一的一个数组实体
    拓展:修改题目,实现array2对array1数组的复制
 */
public class ArrayExer3 {
    public static void main(String[] args) {
        //test1();
        test2();
    }
    public static void test1(){
        int[] array1,array2;

        array1 = new int[]{2,3,5,7,11,13,17,19};
        //显示array1的内容
        for (int i = 0;i < array1.length;i++){
            System.out.println(array1[i]);
        }

        //赋值array2变量等于array1,这不能称作数组的复制
        array2 = array1;//把array1的地址给了array2,堆内存中只有一个数组
        //修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)
        for (int i = 0;i < array2.length;i++){
            if (i % 2 == 0){
                array2[i] = i;
            }
        }
        System.out.println();
        System.out.println(array1);
        //array1变了
    }

    public static void test2(){
        //实现array2对array1数组的复制

        int[] array1,array2;

        array1 = new int[]{2,3,5,7,11,13,17,19};
        //显示array1的内容
        for (int i = 0;i < array1.length;i++){
            System.out.println(array1[i]);
        }

        //数组复制
        array2 = new int[array1.length];
        for (int i = 0; i < array2.length;i++){
            array2[i] = array1[i];
        }

        for (int i = 0;i < array2.length;i++){
            if (i % 2 == 0){
                array2[i] = i;
            }
        }
        //打印出array1
        System.out.println();
        for (int i = 0;i < array1.length;i++){
            System.out.println(array1[i] + "\t");
        }

    }
}

数组的反转

package array;

/**
 * @Author: jt
 * @Date: 2022/3/28 23:40
 * @Version 1.0
 */
/*
算法考察:数组的复制,反转,查找(线型查找,二分查找)
 */
public class ArrayExer4 {
    public static void main(String[] args) {
        String[] arr = new String[]{"JJ","DD","MM","BB","GG","AA"};

        //数组的复制(区别于数组变量的赋值)
        String[] arr1 = new String[arr.length];
        for (int i = 0;i < arr1.length;i++){
            arr1[i] = arr[i];
        }

        //数组的反转
        //方法一
//        for (int i = 0;i < arr.length / 2;i++){
//            String temp = arr[i];
//            arr[i] = arr[arr.length - i - 1];
//            arr[arr.length - i - 1] = temp;
//        }
        //方法二
        for (int i = 0,j = arr.length - 1;i < j;i++,j--){
            String temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //遍历
        for (int i = 0;i < arr1.length;i++){
            System.out.println(arr[i] + "\t");
        }

    }
}

数组的查找

1.线性查找

 //查找:线性查找
        String dest = "BB";

        boolean isFlag = true;
        for (int i = 0;i < arr.length;i++){

            if (dest.equals(arr[i])){
                System.out.println("找到了指定元素,位置为:" + i);
                isFlag = false;
                break;
            }
        }
        if (isFlag){
            System.out.println("很遗憾,没有找到");
        }

2.二分查找

//二分法查找:
        //前提:所查找的数组必须有序
        int[] arr2 = new int[]{-98,-34,-6,2,35,45,49,66,79,89,120,210};

        int dest1 = -45;
        int head = 0;//初始的首索引
        int end = arr2.length - 1;//初始的末索引
        boolean isFlag1 = true;
        while(head <= end){
            int middle = (head + end) / 2;
            if (dest1 == arr2[middle]){
                System.out.println("找到了指定元素,位置为:" + middle);
                isFlag1 = false;
                break;
            }else if (arr2[middle] > dest1){
                end = middle - 1;
            }else{//arr2[middle] < dest1
                head = middle + 1;
            }

        }
        if (isFlag1){
            System.out.println("很遗憾,没找到");
        }

更多推荐

Java中数组的遍历