0

我正在尝试使用下面显示的代码反转数组,但没有成功。该程序的输出是7,0,0而不是7,1,2它应该是。

代码:

import java.util.Arrays;

public class ReverseArray
{
    public static void main(String[] args)
    {
        int[] data = {1, 2, 7};
        int[] dataR = reverseArray(data);
        System.out.println("Original Array: " + Arrays.toString(data));
        System.out.println("Reverse Array: " +  Arrays.toString(dataR));
    }
    public static int[] reverseArray(int[] data)
    {
        int[] reversedData = new int[data.length];
        int i;
        for(i=0; i < data.length; i++);
        {
            reversedData[i] = data[(data.length - i -1)];
        }
        return reversedData;
    }
}

感谢所有帮助,谢谢。

4

6 回答 6

8

这是你的问题:

for(i=0; i < data.length; i++);

删除;. 你写它的方式,首先有一个循环,计数idata.length,然后是一个试图访问reversedData[data.length]一次的范围块。那不会飞

有趣的是:最初,可能我们都没有看到问题所在;在 IDE 中使用格式化规则会很快告诉你哪里出了问题:你会发现你的代码在按照你习惯的规则格式化时看起来不像它应该的样子。

于 2013-03-08T00:29:46.500 回答
0

您应该使用临时变量来交换数组中的值。例如像这样:

for(int i = 0; i < validData.length / 2; i++)
{
    int temp = validData[i];
    validData[i] = validData[validData.length - i - 1];
    validData[validData.length - i - 1] = temp;
}

或者

ArrayUtils.reverse(int[] array)

都在这个问题中描述。

于 2013-03-08T00:29:54.723 回答
0

好球,G.巴赫。我也不确定你问题的第一部分。看起来原始数组是1, 2, 7. 不是相反7, 2, 17, 1, 2

也就是说,您似乎data.length每次都访问可能会减慢速度。我可能会因此创建一个局部变量:

public static int[] reverseArray(int[] data)
{
    int arr_length = data.length
    int[] reversedData = new int[arr_length];
    int j = arr_length - 1;
    for(int i=0; i < arr_length; i++);
    {
        reversedData[i] = data[j--];
    }
    return reversedData;
}

请注意在被访问后如何j自动递减,保持整洁。此外,我们将数组的长度保存到了一个局部变量中,因此访问起来更加高效。

于 2013-03-08T00:44:16.933 回答
0
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner in=new Scanner(System.in);
        int size=in.nextInt();
        int array[]=new int[size];

        for(int i=0;i<size;i++){
            array[i]=in.nextInt();
        }
        for(int i=size-1;i>=0;i--)
        {
            System.out.print(array[i]+" ");
        }


        }

        }
于 2015-11-15T06:24:35.117 回答
0
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class ReverseArray 
{

    public static void main(String[] args) 
    {

        System.out.println("Enter the array Size");
        Scanner in=new Scanner(System.in);
        int size=in.nextInt();
        System.out.println("Enter the array Elements");
        int array[]=new int[size];

        for(int i=0;i<size;i++){
            array[i]=in.nextInt();
        }
        System.out.println("reverse of entered are given below for Size : " +size );
        for(int i=size-1;i>=0;i--)
        {
            System.out.print(array[i]+" ");
        }


        }

}
于 2016-05-06T05:01:49.153 回答
0

输入:

输入要反转的值的数量 7

1 2 3 4 6 7 8

输出: 反转数组:[8, 2, 3, 4, 6, 7, 1]

反转数组:[8, 7, 3, 4, 6, 2, 1]

反转数组:[8, 7, 6, 4, 3, 2, 1]

编码:

public class Test{

    public static void main(String[] args){

         System.out.println("Enter the number of values to reverse");

         Scanner sc = new Scanner(System.in);

         int n  = sc.nextInt();
         int num[] = new int[n];    
         for(int i=0; i < num.length; i++) 
             num[i] = sc.nextInt();

         reverseArray(num, n-1);

    }

    private static void reverseArray(int num[], int end) {
        int start = 0;
        int temp;

        while(start < end) {
            temp = num[start];
            num[start] = num[end];
            num[end] = temp;
            start++;
            end--;
            System.out.println("Reversed Array :"+ Arrays.toString(num));

        }


    }


}
于 2018-12-24T11:57:50.160 回答