学习Java之day07

1.操作数组的工具类

java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法

public class ArrayTest {
   public static void main(String[] args) {

       // 1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
       int[] arr1 = new int[] { 11, 22, 33 };
       int[] arr2 = new int[] { 11, 22, 33 };
       boolean isEquals = Arrays.equals(arr1, arr2);
       System.out.println(isEquals);

       // 2.String toString(int[] a):输出数组信息。
       System.out.println(Arrays.toString(arr1));

       // 3.void fill(int[] a,int val):将指定值填充到数组之中。
       Arrays.fill(arr1, 10);
       System.out.println(Arrays.toString(arr1));

       // 4.void sort(int[] a):对数组进行排序。
       Arrays.sort(arr2);
       System.out.println(Arrays.toString(arr2));
       
     //5.int binarySearch(int[] a,int key) 查找指定的值
       int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
       int index = Arrays.binarySearch(arr3, 210);
       if(index >= 0){
           System.out.println(index);
      }else{
           System.out.println("未找到");
      }

  }
}

2.算法的考查

/*
算法的考查:求数值型数组中的最大值、最小值、平均数、总和等

 定义一个int型的一维数组,包含10个元素,分别赋一些随机整数,
   然后求出所有元素的最大值,最小值,和值,平均值,并输出出来。  
   要求:所有随机数都是两位数。




*/
public class ArrayTest1 {
   public static void main(String[] args) {
       // 定义一个长度为10的数组
       int[] arr = new int[10];

       // 随机赋值
       for (int i = 0; i < arr.length; i++) {
           //值是只要10到100的数
           arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);
      }
       // 遍历
       for (int i = 0; i < arr.length; i++) {
           System.out.print(arr[i]+" ");
      }
       System.out.println();
       // 求最大值
       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 sumValue = arr[0];
       for (int i = 0; i < arr.length; i++) {
           sumValue+=arr[i];
      }
       System.out.println("数组的总和为:" + sumValue);
       
       //求数组的平均值
       int avgValue = sumValue/arr.length;
       System.out.println("数组的平均数为:" + avgValue);
       
       
  }
}
/*
算法的考察:数组的复制、反转、查找(线性查找、二分查找)



*/
public class ArrayTest2 {
   public static void main(String[] args) {
       String[] arr = new String[] { "JJ", "DD", "MM", "BB", "GG", "AA" };

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

       for (int i = 0; i < arr1.length; i++) {
           System.out.print(arr1[i] + " ");
      }
       System.out.println();

       // 2.数组的反转
       // 方法一:
//       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 < arr.length; i++) {
           System.out.print(arr[i] + " ");
      }
       System.out.println();
       // 查找
       // 线性查找
       String dest = "BB";
       dest = "HH";
       boolean flag = true;
       for (int i = 0; i < arr.length; i++) {
           if (dest.equals(arr[i])) {
               System.out.println("找到了指定位置的元素:" + i);
               flag = false;
               break;
          }
      }
       if (flag) {
           System.out.println("没有找到了指定位置的元素.");
      }

       // 二分查找法:(熟练)
       // 前提:所有查找的数组必须是有序的
       int[] arr2 = new int[] { -98, -34, 2, 34, 54, 66, 79, 105, 210, 333 };
       // 需要查找的数字
       int dest1 = -34;
       dest1 = 56;
       int head = 0; // 初始的首索引
       int end = arr2.length - 1; // 初始的末索引
       boolean isFlag = true;
       while (head <= end) {
           int middle = (head + end) / 2;
           if (dest1 == arr2[middle]) {
               System.out.println("找到了数字的索引,位置为:" + middle);
               isFlag = false;
               break;
          } else if (arr2[middle] > dest1) {
               end = middle - 1;
          }else {
               head = middle + 1;
          }

      }
       if (isFlag) {
           System.out.println("很遗憾,没有找到了数字的索引");
      }

  }

}

3.排序(快速排序与冒泡排序)

/*
快速排序:
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,
则分别对这两部分继续进行排序,直到整个序列有序。

*/
public class QuickSort {
   public static void main(String[] args) {
       int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
       System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
       quickSort(data);
       System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
  }

   public static void quickSort(int[] data) {
       subSort(data, 0, data.length - 1);
  }

   private static void subSort(int[] data, int start, int end) {
       if (start < end) {
           int base = data[start];
           int low = start;
           int high = end + 1;
           while (true) {
               while (low < end && data[++low] - base <= 0)
                  ;
               while (high > start && data[--high] - base >= 0)
                  ;
               if (low < high) {
                   swap(data, low, high);
              } else {
                   break;
              }
          }
           swap(data, start, high);

           subSort(data, start, high - 1);// 递归调用
           subSort(data, high + 1, end);
      }
  }

   private static void swap(int[] data, int i, int j) {
       int temp = data[i];
       data[i] = data[j];
       data[j] = temp;
  }
}
package com.bao.java;

/*
* 数组的冒泡排序的实现
*
*/
public class BubbleSortTest {
   public static void main(String[] args) {

       int[] arr = new int[] { 43, 32, 76, -98, 0, 64, 33, -21, 32, 99 };
       System.out.print("数组排序之前:");
       for(int i =0; i<arr.length; i++) {
           System.out.print(arr[i]+" ");
      }
       
       for(int i = 0; i<arr.length-1; i++) {
           for(int j=0; j <arr.length- i-1; j++) {
               if(arr[j] < arr[j+1]) {
                   int temp = arr[j];
                   arr[j] = arr[j+1];
                   arr[j+1] = temp;
              }
          }
      }
       
       
       System.out.print("\n数组排序之后:");
       for(int i =0; i<arr.length; i++) {
           System.out.print(arr[i]+" ");
      }
  }
}

4.有关数组的异常

/*
*
* 数组中的常见异常:
1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
    有范围了,但是调用的时候超出了范围
   


 2. 空指针异常:NullPointerException
    没有范围,直接调用

*/
public class ArrayExceptionTest {
   public static void main(String[] args) {

       // 1. 数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
       int[] arr = new int[] { 1, 2, 3, 4, 5 };

//     for(int i = 0;i <= arr.length;i++){
//         System.out.println(arr[i]);
//     }

//     System.out.println(arr[-2]);

//     System.out.println("hello");

       // 2.2. 空指针异常:NullPointerException
       // 情况一:
//     int[] arr1 = new int[]{1,2,3};
//     arr1 = null;
//     System.out.println(arr1[0]);

       // 情况二:
//     int[][] arr2 = new int[4][];
//     System.out.println(arr2[0][0]);

       // 情况三:
       String[] arr3 = new String[] { "AA", "BB", "CC" };
       arr3[0] = null;
       System.out.println(arr3[0].toString());
  }
}



posted @ 2021-12-21 11:48  天覆者  阅读(34)  评论(0)    收藏  举报