使用递归函数反转数组的后半部分
Using recursive function to reverse the second half of an array
我是Java的初学者。我知道如何打印反向数组,但我不知道如何打印一半。例如:
原始数组 A = {1,2,3,4,5,6,7,8,9,0}
函数后:
转换数组 A' = {1,2,3,4,5,0,9,8,7,6}
请尝试以下步骤,
- 求数组的长度 - N
- 创建另一个大小为 - N 的数组
- 找到一半 - n
- 复制前n个元素
- 中断,从最后一个元素开始(索引到最后一个元素)并复制元素直到第 n 个位置(注意索引指针应递减)
private void reverse(int[] ar, int i, int j) {
if(i>j)
return;
else{
int temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
reverse(ar, ++i, --j);
}
}
从主方法调用 reverse(ar, (ar.length/2), ar.length-1)
。
请大家找到完美的解决方案!!!
导入阵列和扫描仪包
public static void main(String[] args) {
Scanner size = new Scanner(System.in);
System.out.println("Enter Array Size : ");
int arraySize = size.nextInt();
Scanner data = new Scanner(System.in);
System.out.println("Enter Array Data : ");
int arrayData[] = new int[arraySize];
for(int inputLoop = 0; inputLoop < arraySize; inputLoop++) {
arrayData[inputLoop] = data.nextInt();
}
System.out.println("Original Array : " + Arrays.toString(arrayData));
int centerPoint = arrayData.length / 2;
int endPoint = arrayData.length - 1;
reverse(arrayData, centerPoint, endPoint);
System.out.println("Transformed Array : " + Arrays.toString(arrayData));
data.close();
size.close();
}
private static void reverse(int[] arrayData, int centerPoint, int endPoint) {
if(centerPoint > endPoint || centerPoint == endPoint) {
return;
}
else {
arrayData[centerPoint] = arrayData[centerPoint] - arrayData[endPoint];
arrayData[endPoint] = arrayData[centerPoint] + arrayData[endPoint];
arrayData[centerPoint] = arrayData[endPoint] - arrayData[centerPoint];
reverse(arrayData, ++centerPoint, --endPoint);
}
}
}
我是Java的初学者。我知道如何打印反向数组,但我不知道如何打印一半。例如:
原始数组 A = {1,2,3,4,5,6,7,8,9,0}
函数后:
转换数组 A' = {1,2,3,4,5,0,9,8,7,6}
请尝试以下步骤,
- 求数组的长度 - N
- 创建另一个大小为 - N 的数组
- 找到一半 - n
- 复制前n个元素
- 中断,从最后一个元素开始(索引到最后一个元素)并复制元素直到第 n 个位置(注意索引指针应递减)
private void reverse(int[] ar, int i, int j) {
if(i>j)
return;
else{
int temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
reverse(ar, ++i, --j);
}
}
从主方法调用 reverse(ar, (ar.length/2), ar.length-1)
。
请大家找到完美的解决方案!!!
导入阵列和扫描仪包
public static void main(String[] args) {
Scanner size = new Scanner(System.in);
System.out.println("Enter Array Size : ");
int arraySize = size.nextInt();
Scanner data = new Scanner(System.in);
System.out.println("Enter Array Data : ");
int arrayData[] = new int[arraySize];
for(int inputLoop = 0; inputLoop < arraySize; inputLoop++) {
arrayData[inputLoop] = data.nextInt();
}
System.out.println("Original Array : " + Arrays.toString(arrayData));
int centerPoint = arrayData.length / 2;
int endPoint = arrayData.length - 1;
reverse(arrayData, centerPoint, endPoint);
System.out.println("Transformed Array : " + Arrays.toString(arrayData));
data.close();
size.close();
}
private static void reverse(int[] arrayData, int centerPoint, int endPoint) {
if(centerPoint > endPoint || centerPoint == endPoint) {
return;
}
else {
arrayData[centerPoint] = arrayData[centerPoint] - arrayData[endPoint];
arrayData[endPoint] = arrayData[centerPoint] + arrayData[endPoint];
arrayData[centerPoint] = arrayData[endPoint] - arrayData[centerPoint];
reverse(arrayData, ++centerPoint, --endPoint);
}
}
}