我是Java的新手,所以如果我听起来不知道自己在做什么并且我的代码很粗糙,那么您就必须忍受我
我的目标是获取用户的输入,并根据其整数输入将数组旋转多少次。刚开始,我试图使数组反转以查看其移位,但是我的函数中有一些错误让我无法编译。
编辑:我知道我使用列表而不是使用arr。我在看一个例子,无意中输入了
这是我的代码:
import java.util.Scanner;
public class Project1P2 {
public static void main(String[] args) {
int[] arr1 = {2,4,6,8,10,12};
int[] arr2 = shift(arr1);
Scanner input = new Scanner (System.in);
System.out.print("Here is the Array: " + arr1);
System.out.println("Enter a number to shift array: ");
int n = input.nextInt();
}
public static int[] shift(int[] arr)
{
int[] arrShiftDone = new int[list.length];
for (int i = 0, j = arrShiftDone.length - 1; i < list.length; i++, j--)
{
arrShiftDone[j] = list[i];
}
return arrShiftDone;
}
}
答案 0 :(得分:0)
您的错误是您在使用list
的班次方法中应该使用arr
。我已经在下面更新了。我还包括了shift方法。
已编辑为包括负移。
public static void main(String[] args) {
int[] arr1 = { 2, 4, 6, 8, 10, 12 };
int[] arr2 = reverseArray(arr1);
Scanner input = new Scanner(System.in);
System.out.println("Here is the Array: " + Arrays.toString(arr1));
System.out.print("Enter a number to shift array: ");
int n = input.nextInt();
int[] arr3 = shiftArray(arr1, n);
System.out.println("Here is the shifted Array: " + Arrays.toString(arr3));
}
public static int[] reverseArray(int[] arr) {
int[] arrShiftDone = new int[arr.length];
for (int i = 0, j = arrShiftDone.length - 1; i < arr.length; i++, j--) {
arrShiftDone[j] = arr[i];
}
return arrShiftDone;
}
public static int[] shiftArray(int[] arr, int shift) {
int[] arrShiftDone = new int[arr.length];
shift = shift % arr.length;
if (shift < 0) {
shift = arr.length + shift;
}
for (int i = 0 + shift, j = 0; j < arr.length; i++, j++) {
if (i >= arr.length) {
arrShiftDone[j] = arr[i - arr.length];
} else {
arrShiftDone[j] = arr[i];
}
}
return arrShiftDone;
}
答案 1 :(得分:0)
您需要修复几件事:
shift
方法永远不会从main
方法中调用,这意味着它不会对数组做任何事情shift
方法应包含另一个要移动的位数的参数,例如n
shift
方法中,您使用的是list
,而参数声明为arr
下面是移动数组的示例方法:
public static int[] shift(int[] arr, int n) {
if(n > arr.length)
n = n%arr.length;
int[] result = new int[arr.length];
for(int i=0; i < n; i++){
result[i] = arr[arr.length-n+i];
}
int j=0;
for(int i=n; i<arr.length; i++){
result[i] = arr[j];
j++;
}
return result;
}
答案 2 :(得分:0)
编译错误是因为变量arr
未知。应该在方法list
中使用参数shift(int[] arr)
而不是{{1}}。
答案 3 :(得分:0)
您可以使用 Arrays.stream(int[],int,int)
方法两次获得具有指定数组范围的两个流:near 和 far,然后交换它们和 {{3 }} 回到一个流中,从而得到一个移位数组:
```{bash echo=FALSE, comment=""}
echo "![$name]($dir/$file)";
```
public static int[] shiftArray(int[] arr, int n) {
return IntStream
.concat(Arrays.stream(arr, n, arr.length),
Arrays.stream(arr, 0, n))
.toArray();
}
输出:
public static void main(String[] args) {
int[] arr1 = {2, 4, 6, 8, 10, 12};
System.out.println("Source array: " + Arrays.toString(arr1));
System.out.println("Enter a number: ");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] arr2 = shiftArray(arr1, n % arr1.length);
System.out.println("Shifted array: " + Arrays.toString(arr2));
}
另见:concat