导读:本文将介绍Java编程试题,共50道,分为基础和高级两个难度分类,并且包含答案解析。这些试题既可以用于Java学习的练习,又可以用于Java考试的备考。
基础Java编程题
1.创建一个方法用于计算两个整数的和
答案:方法定义为:
```java
public static int add(int a, int b) {
return a + b;
}
```
其中,方法的返回类型为int,方法名为add,参数列表为两个整型a和b。
2.将一个数组中的元素倒序排列
答案:
```java
public static int[] reverse(int[] arr) {
int len = arr.length;
int[] temp = new int[len];
for (int i = 0; i < len; i++) {
temp[i] = arr[len - i - 1];
}
return temp;
}
```
其中,定义了一个reverse方法,返回类型为int[],参数列表为一个整型数组arr。使用for循环将元素倒序排列后返回。
3.找出一个字符串中出现次数最多的字符和出现次数
答案:
```java
public static void findMostUsedChar(String str) {
char[] chars = str.toCharArray();
HashMap
for (char c : chars) {
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
int maxCount = 0;
char maxChar = '\u0000';
for (Map.Entry
if (entry.getValue() > maxCount) {
maxCount = entry.getValue();
maxChar = entry.getKey();
}
}
System.out.println("在字符串" + str + "中出现次数最多的字符是:" + maxChar + ",出现了" + maxCount + "次");
}
```
定义了一个findMostUsedChar方法,方法参数为一个字符串,输出该字符串中出现次数最多的字符和出现次数。将字符串转换为字符数组,使用HashMap统计每个字符的出现次数,然后遍历HashMap找出最多出现的字符和出现次数。
高级Java编程题
4.实现斐波那契数列
答案:
```java
public static int fibonacci(int n) {
if (n == 1 || n == 2) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
```
定义了一个fibonacci方法,方法参数为整型n,返回值为第n个斐波那契数列的值。使用递归实现斐波那契数列。
5.实现一个快速排序算法
答案:
```java
public static void quickSort(int[] arr, int left, int right) {
if (left >= right) {
return;
}
int i = left, j = right, pivot = arr[left];
while (i < j) {
while (i < j && arr[j] >= pivot) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot;
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
```
定义了一个quickSort方法,方法参数为一个整型数组arr、左边界left、右边界right。使用快速排序算法将数组从小到大排序。
6.实现一个多线程的银行账户转账操作
答案:
```java
import java.util.concurrent.locks.ReentrantLock;
public class BankAccount {
private String accountNumber;
private int balance;
private ReentrantLock lock = new ReentrantLock();
public BankAccount(String accountNumber, int balance) {
this.accountNumber = accountNumber;
this.balance = balance;
}
public void transfer(BankAccount destination, int amount) {
try {
lock.lock();
destination.lock.lock();
if (this.balance < amount) {
throw new IllegalArgumentException("余额不足");
}
this.balance -= amount;
destination.balance += amount;
} finally {
lock.unlock();
destination.lock.unlock();
}
}
}
public class BankTransferThread extends Thread {
private BankAccount source;
private BankAccount destination;
private int amount;
public BankTransferThread(BankAccount source, BankAccount destination, int amount) {
this.source = source;
this.destination = destination;
this.amount = amount;
}
@Override
public void run() {
source.transfer(destination, amount);
}
}
public class Main {
public static void main(String[] args) {
BankAccount account1 = new BankAccount("1", 1000);
BankAccount account2 = new BankAccount("2", 2000);
BankTransferThread thread1 = new BankTransferThread(account1, account2, 500);
BankTransferThread thread2 = new BankTransferThread(account2, account1, 1000);
thread1.start();
thread2.start();
}
}
```
定义了一个BankAccount类,包含账户号码属性、余额属性、转账方法以及一个可重入锁。在转账方法中,使用try...finally块保证锁的正常释放。定义了一个BankTransferThread类,用于多线程转账。在Main方法中创建两个账户对象,分别创建两个线程进行转账。
总之,这50道Java编程题包含了Java编程的基础和高级应用,对于Java编程学习和应用有很好的帮助和指导作用。通过练习这些题目可以提高自己的编程技能和能力,熟悉各种Java编程方法和技巧,同时在备考Java考试时也会受益匪浅。