21xrx.com
2025-06-21 00:10:57 Saturday
文章检索 我的文章 写文章
Java面试编程题: 从简单到复杂的练习题例子
2023-06-11 01:55:34 深夜i     12     0
Java

面试编程题, 逻辑

在Java面试中,编程题是必不可少的一部分。做好编程题不仅可以检验你的编程能力,还可以考验你的逻辑思考能力。因此,在准备Java面试时,练习编程题是很必要的。本文将从简单到复杂,给出三个不同难度级别的Java编程题练习例子。

1. 简单难度: 找出一个整数数组中的最大数和最小数

这个题目是一个最基础的编程题,要求找出一个整数数组中的最大数和最小数。我们可以用一个循环遍历整个数组,使用if语句比较大小,得出最大数和最小数。代码如下:

public static void findMaxAndMin(int[] nums) {
  int max = nums[0];
  int min = nums[0];
  for (int i = 1; i < nums.length; i++) {
    if (nums[i] > max) {
      max = nums[i];
    }
    if (nums[i] < min) {
      min = nums[i];
    }
  }
  System.out.println("最大数为: " + max);
  System.out.println("最小数为: " + min);
}

2. 中等难度: 矩阵旋转

这是一道比较典型的数组操作题目,题目要求将一个n*n的矩阵顺时针旋转90度。我们可以定义四个变量l、r、t、b,分别表示矩阵的左、右、上、下边界。然后依次旋转每一圈的数,完成整个旋转操作。具体实现代码如下:

public static void rotateMatrix(int[][] matrix) {
  int n = matrix.length;
  for (int i = 0; i < n / 2; i++) {
    int l = i, r = n - 1 - i, t = i, b = n - 1 - i;
    for (int j = 0; j < r - l; j++) {
      int tmp = matrix[t][l + j];
      matrix[t][l + j] = matrix[b - j][l];
      matrix[b - j][l] = matrix[b][r - j];
      matrix[b][r - j] = matrix[t + j][r];
      matrix[t + j][r] = tmp;
    }
  }
}

3. 高级难度: 实现双向链表

这个题目是面向对象设计和数据结构的一个比较高级的练习题。题目要求我们实现一个双向链表,并完成增删改查等操作。我们首先需要定义一个Node类表示节点,该类包含一个data字段表示存储的数据,以及pre、next两个字段分别表示该节点的前驱和后继。然后我们实现一个LinkedList类,该类含有head、tail两个字段分别表示链表的头和尾节点,同时,我们还需要实现一些方法,如add、remove、get、set等。具体代码实现如下:

public class Node {
  int data;
  Node pre;
  Node next;
  public Node(int data)
    this.data = data;
  
}
public class LinkedList {
  Node head;
  Node tail;
  int size;
  public void add(int data) {
    Node newNode = new Node(data);
    if (head == null)
      head = tail = newNode;
     else
      tail.next = newNode;
      newNode.pre = tail;
      tail = newNode;
    
    size++;
  }
  public void remove(int index) {
    if (index < 0 || index >= size) {
      throw new ArrayIndexOutOfBoundsException();
    }
    Node nodeToRemove = getNode(index);
    if (nodeToRemove == head)
      head = head.next;
      head.pre = null;
     else if (nodeToRemove == tail)
      tail = tail.pre;
      tail.next = null;
     else
      nodeToRemove.pre.next = nodeToRemove.next;
      nodeToRemove.next.pre = nodeToRemove.pre;
    
    size--;
  }
  public int get(int index) {
    if (index < 0 || index >= size) {
      throw new ArrayIndexOutOfBoundsException();
    }
    return getNode(index).data;
  }
  public void set(int index, int data) {
    if (index < 0 || index >= size) {
      throw new ArrayIndexOutOfBoundsException();
    }
    Node nodeToSet = getNode(index);
    nodeToSet.data = data;
  }
  private Node getNode(int index) {
    Node current = head;
    for (int i = 0; i < index; i++)
      current = current.next;
    
    return current;
  }
}

综上所述,面试编程题在Java面试中是非常重要的,而且从简单到复杂地练习编程题有助于我们更好的理解Java的逻辑。希望大家可以通过这篇文章加强自己的编程实战能力。

  
  

评论区