引言

编程是一门实践性极强的学科,通过解决各种编程题目,可以有效地提升编程技能和逻辑思维能力。本文将集结一些有趣的Java编程题目,旨在帮助读者在轻松的氛围中提升编程水平。

一、基础算法题目

1. 打印星号图案

题目描述:编写一个Java程序,打印一个指定大小的星号图案。

代码示例

public class StarPattern {
    public static void main(String[] args) {
        int size = 5;
        for (int i = 1; i <= size; i++) {
            for (int j = 1; j <= size - i; j++) {
                System.out.print(" ");
            }
            for (int k = 1; k <= 2 * i - 1; k++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

2. 求阶乘

题目描述:编写一个Java程序,计算一个非负整数的阶乘。

代码示例

public class Factorial {
    public static void main(String[] args) {
        int n = 5;
        int factorial = 1;
        for (int i = 1; i <= n; i++) {
            factorial *= i;
        }
        System.out.println("The factorial of " + n + " is: " + factorial);
    }
}

二、数据结构题目

1. 合并两个有序数组

题目描述:编写一个Java程序,合并两个有序数组到一个新的数组中。

代码示例

public class MergeSortedArrays {
    public static void main(String[] args) {
        int[] arr1 = {1, 3, 5, 7};
        int[] arr2 = {2, 4, 6, 8};
        int[] mergedArray = new int[arr1.length + arr2.length];

        int i = 0, j = 0, k = 0;
        while (i < arr1.length && j < arr2.length) {
            if (arr1[i] < arr2[j]) {
                mergedArray[k++] = arr1[i++];
            } else {
                mergedArray[k++] = arr2[j++];
            }
        }

        while (i < arr1.length) {
            mergedArray[k++] = arr1[i++];
        }

        while (j < arr2.length) {
            mergedArray[k++] = arr2[j++];
        }

        for (int num : mergedArray) {
            System.out.print(num + " ");
        }
    }
}

2. 实现一个简单的链表

题目描述:编写一个Java程序,实现一个简单的单向链表。

代码示例

class Node {
    int data;
    Node next;

    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

class LinkedList {
    Node head;

    public void add(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
        } else {
            Node current = head;
            while (current.next != null) {
                current = current.next;
            }
            current.next = newNode;
        }
    }

    public void printList() {
        Node current = head;
        while (current != null) {
            System.out.print(current.data + " ");
            current = current.next;
        }
        System.out.println();
    }
}

public class SimpleLinkedList {
    public static void main(String[] args) {
        LinkedList list = new LinkedList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.printList();
    }
}

三、设计模式题目

1. 实现单例模式

题目描述:编写一个Java程序,实现单例模式。

代码示例

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

2. 实现观察者模式

题目描述:编写一个Java程序,实现观察者模式。

代码示例

interface Observer {
    void update(String message);
}

class Subject {
    private List<Observer> observers = new ArrayList<>();

    public void registerObserver(Observer observer) {
        observers.add(observer);
    }

    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }
}

class ConcreteSubject extends Subject {
    public void doSomething() {
        String message = "Something happened!";
        notifyObservers(message);
    }
}

class ConcreteObserver implements Observer {
    public void update(String message) {
        System.out.println("Received message: " + message);
    }
}

public class ObserverPattern {
    public static void main(String[] args) {
        ConcreteSubject subject = new ConcreteSubject();
        ConcreteObserver observer = new ConcreteObserver();

        subject.registerObserver(observer);
        subject.doSomething();
    }
}

总结

本文通过集结一些有趣的Java编程题目,旨在帮助读者在轻松的氛围中提升编程技能。通过解决这些题目,读者可以加深对Java编程基础、数据结构和设计模式的理解。希望读者能够通过不断练习,提升自己的编程水平。