我有一个创建一个类的赋值,我在其中创建一个大小为10的数组,称为source
,并将0-10范围内的随机整数分配给其中的所有索引,然后调用一个方法以相反的顺序创建一个新数组。我尝试了下面的代码:
public class Exercise7_4 {
// reverse array method
public static int[] reverseArray(int[] arr) {
int[] reverse = new int[arr.length];
for (int i = 0; i < reverse.length - 1; i++) {
reverse[i] = arr[arr.length - 1 - i];
}
return reverse;
}
// print array in ascending order
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
System.out.printf("%d\t", arr[i]);
}
System.out.println();
}
public static void main(String[] args) {
int[] source = new int[10];
for (int i = 0; i < source.length - 1; i++) {
source[i] = (int) (Math.random() * 10 + 1);
}
int[] reverse = reverseArray(source);
printArray(source);
printArray(reverse);
}
}
问题是我得到的输出如下:
7 1 3 7 10 9 6 2 6
0 6 2 6 9 10 7 3 1
意思是reverseArray
方法由于某种原因无法在reverse[0]
上正常工作。
我想知道为什么会这样,以及我如何解决它。 在此先感谢!
答案 0 :(得分:2)
从
更改所有for循环for (int i = 0; i < source.length - 1; i++)
到
for (int i = 0; i < source.length; i++)
您的反向方法完全正确(如果您更改循环)。你犯的错误是你创建了一个大小为10的数组,用9个随机值填充它(因此索引10的值将为0)。
答案 1 :(得分:2)
您可以检查在for循环的每次迭代中是否参考了索引。
这是您的解决方案
for (int i = 0; i < reverse.length - 1; i++) {
System.out.println("" + i + " " + (reverse.length - 1 - i));
}
它打印出来:
0 9
1 8
2 7
3 6
4 5
5 4
6 3
7 2
8 1
&#39;我&#39;没有得到值9,而(reverse.length - 1 - i)得不到值0.
更改测试条件:
i < reverse.length
给你最后的位置:
9 0
答案 2 :(得分:1)
更改reverseArray
功能如下:
public static int[] reverseArray(int[] arr) {
int[] reverse = new int[arr.length];
for (int i = 0; i < reverse.length; i++) {
reverse[i] = arr[arr.length - i];
}
return reverse;
}
您无需-1
的{{1}}。
还要更改另一个for循环:
arr.length
此处,您也无需从for (int i = 0; i < source.length; i++) {
source[i] = (int) (Math.random() * 10 + 1);
}
开始-1
。
答案 3 :(得分:0)
package com.test;
public class SortArray {
private int[] getSortedArry(int[] arr){
int arrLen = arr.length;
int reversedArry[] = new int[arrLen];
System.out.println("array lenght: " +arr.length);
int j = 0;
for(int i=arrLen-1; i>=0; i--){
reversedArry[j] = arr[i];
j++;
}
System.out.print("\n");
return reversedArry;
}
public static void main(String[] args){
int arr[] = {10,2,3,4,5,12,23,43,45,65};
SortArray sortArray = new SortArray();
int reversedArry[] = sortArray.getSortedArry(arr);
for(int i=0;i<reversedArry.length;i++){
System.out.print(reversedArry[i] + " ");
}
}
}