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++);

を削除し;ます。iあなたが書いた方法では、最初にまでカウントするループがありdata.length、次にスコープ付きブロックがreversedData[data.length]1 回だけアクセスを試みます。それでは飛ばない。

おもしろいことに、最初は、おそらく誰も問題が何であるかを理解していませんでした。IDE で書式設定規則を使用すると、何が問題なのかがすぐにわかります。慣れ親しんだ規則に従って書式設定すると、コードが想定どおりに表示されないことがわかります。

于 2013-03-08T00:29:46.500 に答える
0

良いキャッチ、G。バッハ。あなたの質問の最初の部分についてもよくわかりません。元の配列は1, 2, 7です。その逆ではない7, 2, 1でしょ7, 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 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
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

配列内の値を交換するには、一時変数を使用する必要があります。たとえば、次のようにします。

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

入力:

逆にする値の数を入力してください 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 に答える