Q2:完成一个支持各种数组操作的类
hdu Java练习题
题目要求:
尝试使用类的继承、接口的实现,完成以下功能
完成一个支持各种数组操作的类(AdvancedArray),提供公共的数组操作API
这些公共的数组操作API分为基本操作和高级操作,用接口声明
AdvancedArray类继承自一个通用的数组操作类BasicArray
BasicArray是一个抽象类,声明了数组类必须要有的1个基本功能:给数组赋值
答案:
建立如图所示的包和类:
- BasicArray
package cn.edu.hdu.test3.problem2;
public abstract class BasicArray {
// 数组类中的成员变量:待处理的数组myList
int[] myList;
// 两个抽象函数:设置数组即给数组赋值,将外部传入的数组赋给myList
abstract public void setArray(int[] array);
}
- BasicArrayOperation
package cn.edu.hdu.test3.problem2;
public interface BasicArrayOperation {
// 基本操作API
int getMaxValue();
int getMinValue();
void insert(int index, int key);
void move(String direction, int offset);
void printArray();
}
- AdvancedArrayOperation
package cn.edu.hdu.test3.problem2;
public interface AdvancedArrayOperation {
// 高级数组操作API
int binarySearch(int key);
void quicksort(int left, int right);
void shuffle(int num);
}
- AdvancedArray
package cn.edu.hdu.test3.problem2;
public class AdvancedArray extends BasicArray implements BasicArrayOperation, AdvancedArrayOperation {
@Override
public void setArray(int[] array) {
myList = array;
}
@Override
public int getMaxValue() {
int max = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] > max) {
max = myList[i];
}
}
return max;
}
@Override
public int getMinValue() {
int min = myList[0];
for (int i = 1; i < myList.length; i++) {
if (myList[i] < min) {
min = myList[i];
}
}
return min;
}
@Override
public void insert(int index, int key) {
int[] newArray = new int[myList.length + 1];
System.arraycopy(myList, 0, newArray, 0, index);
newArray[index] = key;
System.arraycopy(myList, index, newArray, index + 1, myList.length - index);
myList = newArray;
}
@Override
public void move(String direction, int offset) {
if (direction.equals("Left")) {
int length=myList.length;
int []temp=new int [length];
for (int i = 0; i <length; i++) {
temp[i]=myList[(i+offset)%length];
}
myList=temp;
} else if (direction.equals("right")) {
int length=myList.length;
int []temp=new int [length];
for (int i = 0; i <length; i++) {
temp[(i+offset)%length]=myList[i];
}
myList=temp;
}
}
@Override
public void printArray() {
for (int i : myList) {
System.out.print(i + " ");
}
System.out.println();
}
@Override
public int binarySearch(int key) {
int left = 0;
int right = myList.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (myList[mid] == key) {
return mid;
} else if (myList[mid] < key) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
@Override
public void quicksort(int left, int right) {
if (left < right) {
int pivotIndex = partition(left, right);
quicksort(left, pivotIndex - 1);
quicksort(pivotIndex + 1, right);
}
}
private int partition(int left, int right) {
int pivot = myList[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (myList[j] < pivot) {
i++;
swap(i, j);
}
}
swap(i + 1, right);
return i + 1;
}
private void swap(int i, int j) {
int temp = myList[i];
myList[i] = myList[j];
myList[j] = temp;
}
@Override
public void shuffle(int num) {
for (int i = 0; i < num; i++) {
int randomIndex1 = (int) (Math.random() * myList.length);
int randomIndex2 = (int) (Math.random() * myList.length);
int temp = myList[randomIndex1];
myList[randomIndex1] = myList[randomIndex2];
myList[randomIndex2] = temp;
}
}
}
运行截图:
博主是专业Java辅导,解决Java实验难题,Java大作业,靠谱细致,欢迎私信询问。