1、eclipse输入提示:Alt+/

数组的声明

1、静态初始化

  1. int arr[] =new int[]{3,9,8};
  2. int[] arr = {3,9,8};

2、动态初始化

  1. int [] arr = new int[3]

数组小知识

1、长度:每个数组都有一个属性length指明它的长度,例如:a.length 指明数组a的长度(元素个数)
2、随机数:在[a,b]内取随机数。(Math.random*(b-a+1)+a)
Math.random()默认产生大于等于0.0且小于1.0之间的随机double型随机数
即:0.0<=Math.random()<1.0

多维数组

image.png
image.png

练习题

练习2

image.png

  1. public class ArrayExer1{
  2. public static main(String[] args)
  3. {
  4. int [][]arr= new int [][]{{3,5,8},{12,9},{7,0,6,4}};
  5. int sum=0;
  6. for(int i=0;i<arr.length ;i++)
  7. {
  8. for(int j=0;j<arr[i].length;j++){
  9. sum+=arr[i][j];
  10. }
  11. }
  12. System.out.println("总和为:"+sum );
  13. }
  14. }

练习3

image.png

练习4

image.png

  1. public class YangHuiTest{
  2. public static void main(String[] args){
  3. //声明并初始化
  4. int[][] yanghui=new int[10][];
  5. //给数组的元素赋值
  6. for(int i=0;i<yanghui.length;i++){
  7. yanghui[i]=new int[i+1];
  8. //2.1给首末元素赋值
  9. yanghui[i][0]=1;
  10. yanghui[i][i]=1;
  11. //给每行的非首末元素进行赋值
  12. if(i>1){
  13. for(int j=1;j<yanghui[i].length-1;j++){
  14. yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
  15. }
  16. }
  17. }
  18. //遍历数组
  19. for(int i;i<yanghui.length;i++){
  20. for(int j=0;j<yanghui[i].length;j++){
  21. System.out.print(yanghui[i][j]+" ");//不换行
  22. }
  23. System.out.println();//换行
  24. }
  25. }
  26. }

拓展笔试题

创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时,要求元素的值各不相同。

  1. public class tuozhan{
  2. public static void main(String[] args){
  3. //声明数组
  4. int[] num=int[6];
  5. //赋值并判断
  6. for(int i=0;i<6;i++){
  7. //num[i]=(Math.random*(30)+1);
  8. num[i]=(Math.random()*30+1);
  9. for(int j=0;j<i;j++){
  10. if(num[i]==num[j])
  11. {
  12. i=i-1;
  13. break;
  14. }
  15. }
  16. }
  17. //数组打印
  18. for(int k=0;k<num.length();k++)
  19. System.out.print(num[k]+",");
  20. }
  21. }


数组中常见的算法

数组元素的赋值(杨辉三角、回形数等)

回形数:从键盘输入一个整数(1~20) 则以该数字为矩阵的大小,把1,2,3…n*n 的数字按照顺时针螺旋的形式填入其中。

  1. import java.util.Scanner;
  2. public class hui{
  3. public static void main(String[] args){
  4. //2.Scanner的实例化
  5. Scanner scan = new Scanner(System.in);
  6. //接受数据
  7. System.out.println("请输入1-20的整数:");
  8. int n = scan.nextInt();
  9. //System.out.println(age);
  10. }
  11. }

求数值型数组中元素的最大值、最小值、平均数、总和等

练习5

image.png

  1. public class ArrayExer1 {
  2. public static void main(String[] args) {
  3. //int[] num=num[10];
  4. int []num = new int[10];
  5. for(int i=0;i<num.length;i++){
  6. num[i]= Math.random()*90+10;
  7. }
  8. //最大值
  9. //
  10. System.out.println("总和为:" + sum);
  11. }
  12. }

数组的复制、反转、查找(线性查找、二分法查找)

数组的复制

练习6

image.png

  1. public class ArrayTest {//自己写的
  2. public static void main(String[] args) {
  3. //初始化
  4. //int [] array1 = new int{2,3,5,7,11,13,17,19};
  5. int [] array1 = new int[]{2,3,5,7,11,13,17,19};
  6. int [] array2 = new int[array1.length];//为array2创建空间
  7. //int [] array2;//只是声明
  8. //显示Array1的内容
  9. for(int i;i<array1.length;i++){
  10. System.out.println(array1[i]);
  11. array2[i]=array1[i];//赋值array2
  12. }
  13. // array2=array1;
  14. //修改array2
  15. for(int j=0;j<array2.length;j=j+2){
  16. array[j]=j;
  17. }
  18. }
  19. }
  1. * 使用简单数组
  2. (1)创建一个名为ArrayExer2的类,在main()方法中声明array1array2两个变量,他们是int[]类型的数组。
  3. (2)使用大括号{},把array1初始化为8个素数:2,3,5,7,11,13,17,19
  4. (3)显示array1的内容。
  5. (4)赋值array2变量等于array1,修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)。打印出array1
  6. *
  7. * 思考:array1array2是什么关系?array1array2地址值相同,都指向了堆空间的唯一的一个数组实体。
  8. * 拓展:修改题目,实现array2array1数组的复制
  9. */
  10. public class ArrayExer2 {//参考答案
  11. public static void main(String[] args) { //alt + /
  12. int[] array1,array2;
  13. array1 = new int[]{2,3,5,7,11,13,17,19};
  14. //显示array1的内容
  15. for(int i = 0;i < array1.length;i++){
  16. System.out.print(array1[i] + "\t");
  17. }
  18. //赋值array2变量等于array1
  19. //不能称作数组的复制。
  20. array2 = array1;
  21. //老师在ArrayExer2
  22. //修改array2中的偶索引元素,使其等于索引值(如array[0]=0,array[2]=2)
  23. for(int i = 0;i < array2.length;i++){
  24. if(i % 2 == 0){
  25. array2[i] = i;
  26. }
  27. }
  28. System.out.println();
  29. //打印出array1
  30. for(int i = 0;i < array1.length;i++){
  31. System.out.print(array1[i] + "\t");
  32. }
  33. }
  34. }

数组的反转

  1. public class Array{
  2. public static void main(String[] args){
  3. String[] arr = new string[]{"11","22","33","44","55","66"};
  4. //数组的反转
  5. for(int i=0;i<arr.length/2;i++){
  6. String temp = arr[i];
  7. arr[i]=arr[arr.length-i-1];
  8. arr[arr.length-i-1]=temp;
  9. }
  10. //遍历
  11. for(int i=0;i<arr.length;i++){
  12. System.out.println(arr[i]+"\t");
  13. }
  14. }
  15. }

线性查找

判断

  1. public class Array{
  2. public static void main(String[] args){
  3. String[] arr = new string[]{"11","22","33","44","55","66"};
  4. //
  5. String dest = "33";
  6. // bool flag =false;
  7. boolean isFlag=true;
  8. for(int i=0;i<arr.length;i++){
  9. if(dest.equals(arr[i])){
  10. isFlag=false;
  11. System.out.println("找到了指定的位置:"+i);
  12. break;
  13. }
  14. }
  15. if(isFlag){
  16. System.out.println("很遗憾,未找到!");
  17. }
  18. }
  19. }

二分查找(考察频繁)

  1. public class Array{
  2. public static void main(String[] args){
  3. //二分法查找:(熟悉)
  4. //前提:所要查找的数组必须有序。
  5. int[] arr2 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
  6. int dest1 = -34;
  7. int head =0;
  8. int end = arr2.length-1;
  9. boolean isFlag=true;
  10. while(head<=end){
  11. int mid=(head+end)/2;
  12. if(dest1=arr2[mid]){
  13. System.out.println("找到了指定的位置:"+mid);
  14. isFlag=false;
  15. break;
  16. }
  17. else if(dest<arr2[mid]){
  18. //end=mid;这个是错误的
  19. end=mid-1;
  20. }
  21. else{
  22. //head=mid;这个是错误的
  23. head=mid+1;
  24. }
  25. }
  26. if(isFlag){
  27. System.out.println("很遗憾,未找到!");
  28. }
  29. }
  30. }

数组元素的排序算法

要求:红色部分必须会手写,黄色的需要知道思想
image.png

冒泡排序(会手写)

image.png

  1. public class BubbleSortTest{
  2. public static void main(String[] args){
  3. int[] arr = new int[]{45,84,3,7,56,23,48,58,58};
  4. //冒泡排序
  5. for(int i=0;i<arr.length-1;i++){
  6. for(int j=0;j<arr.length-i-1;j++){
  7. if(arr[j]>arr[j+1]){
  8. int temp =arr[j];
  9. arr[j]=arr[j+1];
  10. arr[j+1]=temp;
  11. }
  12. }
  13. }
  14. //遍历输出
  15. for(int i=0;i<arr.length;i++){
  16. System.out.print(arr[i]+"\t");
  17. }
  18. }
  19. }

快速排序(会手写)

Arrays工具类

image.png

  1. import java.util.Arrays;
  2. /*
  3. * java.util.Arrays:操作数组的工具类,里面定义了很多操作数组的方法
  4. *
  5. *
  6. */
  7. public class ArraysTest {
  8. public static void main(String[] args) {
  9. //1.boolean equals(int[] a,int[] b):判断两个数组是否相等。
  10. int[] arr1 = new int[]{1,2,3,4};
  11. int[] arr2 = new int[]{1,3,2,4};
  12. boolean isEquals = Arrays.equals(arr1, arr2);
  13. System.out.println(isEquals);
  14. //2.String toString(int[] a):输出数组信息。
  15. System.out.println(Arrays.toString(arr1));
  16. //3.void fill(int[] a,int val):将指定值填充到数组之中。
  17. Arrays.fill(arr1,10);
  18. System.out.println(Arrays.toString(arr1));
  19. //4.void sort(int[] a):对数组进行排序。
  20. Arrays.sort(arr2);
  21. System.out.println(Arrays.toString(arr2));
  22. //5.int binarySearch(int[] a,int key)
  23. int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
  24. int index = Arrays.binarySearch(arr3, 210);
  25. if(index >= 0){
  26. System.out.println(index);
  27. }else{
  28. System.out.println("未找到");
  29. }
  30. }
  31. }

image.png