java面试之数组基础温习

数组的概念

是由多个相同类型的元素按照一定的顺序排列的数据集合,可以通过整数下标访问数组中的值。例如a是一个整数类型的数组,a[i]就是数组下标为i的整数。

数组的定义

数组在声明的时候必须指定其类型和数组名称,数组初始化有两种即静态初始化、动态初始化。下面声明了一个int类型静态初始化的数组。

int[] a = {1,2,3,4,5,6};

亦可以像下面动态初始化长度为10的int类型数组。

int[] arr = new int[10];

arr数组被创建的时候,所有的元素默认初始化为0,如果是boolean
数组默认为false而对象数组元素则初始化为null。需要注意的是:数组本身是引用数据类型,数组元素即可以是基本数据类型也可是引用数据类型。如下声明了一个引用数据类型的数组。

String[] args = new String[10];

特别注意的是,当试图访问args[10]数组元素时将会引发Array index out of bounds 的异常。数组创建的时候将会在内存中开辟一个连续的空间,所以我们可以通过索引访问数组元素,而且数组创建完毕后,其长度也不能被改变。

数组的内存分析

int[] arr = new int[4];
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;

数组内存分析如下图所示;
在这里插入图片描述

数组面试题

  1. 华夏花城短租半年,780元/每月,有空调、有网络、独立卫生间,厨房齐全。屋内均为IT人士,所以要求来租者最好是刚毕业的年轻人。
 public static void main(String[] args) {
       int[] arr = {8, 2, 1, 0, 3};
       int[] index = {2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3};
       String telephone = "";
       for (int i = 0; i < index.length; i++) {
           telephone += arr[index[i]];    
       }
       System.out.println("联系方式:" + telephone);
   }
  1. 请用scanner类输入5个学生的成绩并输出最大的学生的成绩
 public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入学生个数");
       int num = scanner.nextInt();
       System.out.println("请输入学生成绩");
       int[] arr = new int[num];
       for (int i = 0; i < arr.length; i++) {
           arr[i] = scanner.nextInt();
       }
       // 获取最大值
       int max = 0;
       for (int i = 0; i < arr.length; i++) {
           if (max < arr[i]) {
               max = arr[i];
           }
       }

       System.out.println("学生最大成绩为:" + max);
   }
  1. 请输出99乘法表
       public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(i + "*" + j + "=" + i * j+" ");
            }
            System.out.println();
        }
    }
    
  2. 请输出1-100以内的质数。
  public static void main(String[] args) {
       // 输出1到100以内的质数(除了能被1和本身进行整除)
       for (int i = 2; i < 101; i++) {
           boolean flag = false;
           for (int j = 2; j < i; j++) {
               // 即能被整除
               if (i % j == 0) {
                   flag = true;
               }
           }
           // 如果是质数:内循环的第一个if判断将会执行,flag为true
           if (flag) {
               System.out.println(i);
           }
       }
   }
}
  1. 任意输出两个数,并求其最大公约数和最小公倍数,提示最大公约数与最小公倍数的乘积即为两个数之积。

  public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入两个数");
       int m = scanner.nextInt();
       int n = scanner.nextInt();
       int i = getNum(m, n);
       int j = getNumSub(m, n);
       System.out.println("最小公约数为:" + i + "最大公倍数为:" + m * n / i);
       System.out.println("最小公约数为:" + j + "最大公倍数为:" + m * n / j);

   }

   /**
    * 思路:先获取两个数最大的,判断两个数分别相除从最大数开始每次递减的数组
    * 若能出现刚刚好能被第一个数整除即为最大公约数
    */
   public static int getNum(int m, int n) {
       int max = m > n ? m : n;
       int num = 1;
       for (int i = max; i > 0; i--) {
           if (m % i == 0 && n % i == 0) {
               num = i;
               break;
           }

       }

       return num;
   }
   
   /**
    输入两整数m和n(m>=n)
    1)m%n 得出余数,
    2)若余数为0,则 n 即为两数的最大公约数
    3)若余数不为0,则 m=n,n=余数,再执行第1步。
    */
   public static int getNumSub(int m, int n) {
       if (m < n) {
           int temp = n;
           n = m;
           m = temp;

       }
       if (m % n != 0) {
           return getNum(n, m % n);
       }

       return 1;
   }
  1. 请写出冒泡程序和选择程序
  public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       System.out.println("请输入数组长度");
       int i = scanner.nextInt();
       int[] arr = new int[i];
       for (int j = 0; j < arr.length; j++) {
           int random = (int) (Math.random() * 100);
           arr[j] = random;
       }
       System.out.println("生成的数组:" + Arrays.toString(arr));

       chooseSort(arr);
       bubbleSort(arr);

   }

   public static void chooseSort(int[] arr) {
       // 选择排序,每一次可以确保最大的在最后面
       for (int j = 0; j < arr.length; j++) {
           for (int k = j + 1; k < arr.length; k++) {
               if (arr[j] > arr[k]) {
                   int temp = arr[j];
                   arr[j] = arr[k];
                   arr[k] = temp;
               }
           }
       }

       System.out.println(Arrays.toString(arr));
   }

   /** 冒泡排序
    * 外层循环控制循环次数
    * 内层循环实际进行比较
    */
   public static void bubbleSort(int[] arr) {
       for (int i = 0; i < arr.length; i++) {
           for (int j = 0; j < arr.length - 1 - i; j++) {
               if (arr[j] > arr[j + 1]) {
                   int temp = arr[j];
                   arr[j] = arr[j + 1];
                   arr[j + 1] = temp;
               }

           }
       }

      System.out.println(Arrays.toString(arr));

目前遇到的数组面试题大概就是这么多,后面遇到还会继续更新。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章