2016-04-04 8 views
0

このプログラムの考え方は、入力配列を最小の番号から最大の番号にソートすることです。Java - forループ内の配列を変更し、forループが終了した後にそれを記憶させる方法はありますか?

私は全体的な方法にいくつかの問題がありますが、forループ出口の後に '結果'配列が記憶されています。メソッドを呼び出そうとすると、結果が保存されたようには見えません。

また、何らかの理由で結果配列の値として0と13が返されますが、元の配列の値ではありませんが、どこから来たのか、どうやって取得したのかわかりません。

public static int[] sortMe(int[] inputArray){ 
int[] result = new int[inputArray.length]; 
    for(int i = 0; i < inputArray.length - 1; i++){ 
     for(int j=0; j <inputArray.length - 1; j++){ 
      if (inputArray[j] > inputArray[j+1]){ 
       int temp = inputArray[j]; 
       result[j] = inputArray[j+1]; 
       result[j+1] = temp; 
      } 
     } 
    return result; 
} 
+0

ソートアルゴリズムが意味的に間違っています – Pooya

答えて

2

メソッドは結果を返します。 したがって、メソッドの外側から呼び出すと、結果が元の配列に戻されます。このような何か:

int[] myArray = new int[]{3,1,5,4,2}; 
myArray = sort(myArray); 

あなたの方法でいくつかの問題があります:あなたは正しくソートされていないので、最初の結果の配列を作成するときに

1)0の値が発生しているが、すべての値の中には、デフォルトでは、配列はゼロに初期化されます。

2)また、中間結果配列をまったく必要としないので、inputArrayを直接変更するだけです。

3)さらに、return文は外側のforループ内に配置され、1回だけ反復した後に結果を返すようになりました。両方のループの外側に移動する必要があります。

私は、次の作業の結果を使用してメソッドのコードを調整している:コードint[] result = new int[inputArray.length];

public static int[] sortMe(int[] inputArray) { 
    for (int i = 0; i < inputArray.length; i++) { 
     for (int j = 0; j < inputArray.length - 1; j++) { 
      if (inputArray[j] > inputArray[j + 1]) { 
       int temp = inputArray[j]; 
       inputArray[j] = inputArray[j + 1]; 
       inputArray[j + 1] = temp; 
      } 
     } 
    } 
    return inputArray; 
} 
+0

メソッドを呼び出すには、私はそれに似たものがありますが、なんらかの理由で印刷されません...他のメソッドは正常に動作します – user3195277

0

は、新しい配列を作成し、いくつかの連続した要素がすでにソートされている場合は、そのため0にすべての要素を初期化し、彼らがドン内部ループを処理せず、結果配列のこれらの要素は0のままです。 たとえば、配列{4,6,1,9}の場合、{0,1,6,0}が結果として得られます。 あなたの場合は、入力配列の内容を結果配列にコピーする方がよいでしょう。

また、連続する要素のチェックだけではうまくいかない場合があります。 配列{4,6,1,9}の場合、連続する要素のみを比較すると{4,1,6,9}が結果として得られます。だから、別のアプローチを考えている必要があります。

第2に、ループの 'i'を閉じた後にreturn文が見つからないため、コンパイルエラーが発生するようです。

関連する問題