Java基础知识复习–day06

问题

        • 1.二维数组的的初始化?
        • 2.java是否有多维数组?
        • 3.判断下面代码的输出结果是多少?
        • 4.数据结构主要解决的是什么?
        • 5.声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是:
        • 6.计算杨辉三角形
        • 7.数组中涉及的常见算法
        • 8.创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,同时要求元素的值各不相同
        • 9.数组的反转
        • 10.使用二分查找法查找某个数
        • 11.衡量排序算法的优劣
        • 12.排序算法分类
        • 13.回忆十大内部排序算法?
        • 14.算法具有哪几个特征?
        • 15.冒泡排序的基本思想是什么?请用样例代码实现?
        • 16.快速算法的基本思想是什么?请用样例代码实现?
        • 17.Arrays工具类的基本使用方法有哪些?
        • 18.数组下标越界的异常是什么?数组的空指针异常是什么?

1.二维数组的的初始化?

int[][] arr1=new int[][]{{1,2,3},{4,5},{6,7,8}};//静态初始化
int arr1[][]=new int[][]{{1,2,3},{4,5},{6,7,8}};//静态初始化
int[] arr1[]=new int[][]{{1,2,3},{4,5},{6,7,8}};//静态初始化
String[][] arr2=new String[3][2];//动态初始化
String[][] arr2=new String[3][];//动态初始化
String[][] test= {{"1","2"},{"3","4"}};

2.java是否有多维数组?

有的

3.判断下面代码的输出结果是多少?

public static void main(String[] args) {
  int[][] arr=new int[4][3];
  System.out.println(arr);
  System.out.println(arr[0]);
  System.out.println(arr[0][0]); 
 }

答案:
[[I@2f92e0f4
[I@28a418fc
0

4.数据结构主要解决的是什么?

1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
2.数据的存贮结构:
线性表:顺序表、链表、栈、队列
树形结构:二叉树
图形结构:

5.声明:int[] x,y[]; 在给x,y变量赋值以后,以下选项允许通过编译的是:

a ) x[0] = y;
b) y[0] = x;
c) y[0][0] = x;
d) x[0][0] = y;
e) y[0][0] = x[0];
f) x = y;
答案:
可以编译成功的是:
b,e

6.计算杨辉三角形

public static void main(String[] args) {
  int[][] test=new int[10][];
  for(int i=0;i<test.length;i++) {
   test[i]=new int[i+1];
   test[i][0]=test[i][i]=1;
   if(i>1) {
    for(int j=1;j<i;j++) {
     test[i][j]=test[i-1][j-1]+test[i-1][j];
    }
   }
  }
  for(int i=0;i<test.length;i++) {
   for(int j=0;j<test[i].length;j++) {
    System.out.print(test[i][j]+"   ");
   }
   System.out.println();
  }
 }

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

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

8.创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,同时要求元素的值各不相同

public static void main(String[] args) {
  int test[]=new int[6];
  int temp=0;
  boolean flag=true;
  for(int i=0;i<test.length;i++) {
   do {
    temp=(int)(Math.random()*30+1);
    for(int j=0;j<i;j++)
    {
     if(temp==test[j]) {
      flag=false;
     }
    }
   }while(!flag);
   test[i]=temp;
   System.out.println("["+i+"]="+test[i]);
  }  
 }

9.数组的反转

public static void main(String[] args) {
  String[] arr=new String[] {"1","2","3","4","5"};
  String temp="";
  int length=arr.length;
  for(int i=0;i<length/2;i++) {
   temp=arr[length-i-1];
   arr[length-i-1]=arr[i];
   arr[i]=temp;
  }
  for(int i=0;i<length;i++) {
   System.out.print(arr[i]+"  ");
  }
 }

10.使用二分查找法查找某个数

public static void main(String[] args) {
  int[] arr2=new int[] {-1,1,3,4,5,6};
  int dest1=-1;
  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 {
    head=middle+1;
   }
  }
  if(isFlag1) System.out.println("没有找到");
 }

11.衡量排序算法的优劣

1.时间复杂度
2.空间复杂度
3.稳定性

12.排序算法分类

1.内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排
序操作都在内存中完成。
2.外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排
序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最
常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。

13.回忆十大内部排序算法?

1.选择排序:直接选择排序、堆排序
直接选择排序:第一次从R[0]R[n-1]中选取最小值,与R[0]交换,第二次从R[1]R[n-1]中选取最小值,与R[1]交换,…,第i次从R[i-1]R[n-1]中选取最小值,与R[i-1]交换,…,第n-1次从R[n-2]R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。

2.交换排序:冒泡排序、快速排序
3.插入排序:直接插入排序、折半插入排序、Shell排序

插入排序(Insertion-Sort)的基本思想:每次将一个待排序的数据按照大小插入到前面已经排好序的适当位置,直到全部数据插入完成为止。
4.归并排序
5.桶式排序
6.基数排序

14.算法具有哪几个特征?

1.输入
2.输出
3.有穷性
4.确定性
5.可行性

15.冒泡排序的基本思想是什么?请用样例代码实现?

1.相邻两个数据进行比较,比较数字偏大(偏小)就互换,第一轮获得最小(最大)的数。
2.

public static void main(String[] args) {
  int[] test=new int[] {5,2,7,10,1,-1,-3};
  for(int i=test.length-1;i>0;i--) {
   for(int j=1;j<=i;j++) {
    if(test[j-1]>test[j]) {
     int temp=test[j-1];
     test[j-1]=test[j];
     test[j]=temp;
    }
   }
  }
  for(int i=0;i<test.length;i++) {
   System.out.print(test[i]+"  ");
  }
 }

16.快速算法的基本思想是什么?请用样例代码实现?

Java基础知识复习–day06_第1张图片

public class JavaDocTest {
 private static void swap(int[] data, int i, int j) {
  int temp = data[i];
  data[i] = data[j];
  data[j] = temp;
 }
 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);
  }
 } 
 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));
 }
}

17.Arrays工具类的基本使用方法有哪些?

1.判断两个数组是否相等

int[] arr1=new int[] {1,2,3,4};
int[] arr2=new int[] {1,2,3,4};
boolean isEquals=Arrays.equals(arr1, arr2);
System.out.println(isEquals);

2.输出数组信息

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

3.将指定值填充到数组之中

Arrays.fill(arr1, 10);
System.out.println(Arrays.toString(arr1));

4.对数组进行排序

Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));

5.对排序后的数组进行二分法检索指定的值

int index=Arrays.binarySearch(arr2, 2);
 if(index>=0) {
  System.out.println(index);
 }else {
 System.out.println("未找到");
}

18.数组下标越界的异常是什么?数组的空指针异常是什么?

1.java.lang.ArrayIndexOutOfBoundsException
2.java.lang.NullPointerException

你可能感兴趣的:(Tomcat学习实践过程记录)