2012-03-14 19 views
0
Input array: [200, 8, 10, 60, 30, 80]; 
Output am getting: [200, 10, 60, 80, 30, 8]; 
Output required: [200, 60, 80, 8, 10, 30]; 

目的を用いて配列の最後の値の要素より少ない移動される:(配列要素が50未満である場合、アレイの底部に移動が、配列の順序を維持50要素未満を挿入する前に左にシフトします)。例は上に示したとおりです。ジャワ

問題
1. 10が50未満であっても、それはまだ下に移動されていません。
2.最初に下に移動して30を移動するため、8は30より前でなければなりません。しかし、最後は8です。

私のJavaコード:

import java.util.*; 
public class chapte1_17 
{ 
    public static void main(String[] args) 
    { 
    int list[] = new int[] {200, 8, 10, 60, 30, 80}; 
    int length = list.length; 
    int value = 50; 
    int temp; 
    //System.out.println(length); 
    for (int i = 0 ; i < list.length ; i++) 
    { 
     if (list[i] < value) {    
      int remIndex = i; 
      temp = list[i]; 
      //System.out.println(remIndex); 
      //System.out.println(temp); 

      for (int j = remIndex ; j < list.length - 1 ; j++) 
      { 
       list[ j ] = list[ j + 1 ] ; 

      } 
      list[list.length -1] = temp; 
     } 

     System.out.println(list[i] + ""); 
    } 
    } 
} 

私は、ソートやJavaに新しいです - 任意の助けいただければ幸いです。

+0

':

for (int i = 0; i < list.length; i++) { //code } for (int i = 0; i < list.length; i++) { System.out.println(list[i] + ""); } 

2つ目は、このような何かをしようと、移動のロジックですあなたのロジックごとに...どこが間違っているのかを知ることになるでしょう... –

答えて

1

まず、あなたの出力があります間違っていれば、最初のforループが終了したら配列をループする必要があります。 (リスト[i]が<値){ `問題を引き起こします。..紙を取ると、ソートなどの場合

int list[] = new int[] { 200, 8, 10, 60, 30, 80 }; 
    int length = list.length; 
    int value = 50; 
    int temp; 
    int actual_i = 0; 
    // System.out.println(length); 
    for (int i = 0; i < list.length; i++) { 
     if (list[i] < value && actual_i < list.length - 1) { 

      int remIndex = i; 
      temp = list[i]; 
      // System.out.println(remIndex); 
      // System.out.println(temp); 

      for (int j = remIndex; j < list.length - 1; j++) { 
       list[j] = list[j + 1]; 

      } 
      list[list.length - 1] = temp; 
      i--; 
     } 
     actual_i++; 

    } 
    for (int i = 0; i < list.length; i++) { 
     System.out.println(list[i] + ""); 
    } 
+0

ありがとうございます。完璧なソリューション。 – user679460

0

次は少し簡単かもしれません:

int list[] = new int[] {200, 8, 10, 60, 30, 80}; 
    List high = new ArrayList(); 
    List low = new ArrayList(); 

    for (int i = 0; i < list.length; i++) { 
     int temp = list[i]; 
     if (temp >= 50) { 
      high.add(temp); 
     } else { 
      low.add(temp); 
     } 
    } 

    List test = new ArrayList(); 
    test.addAll(high); 
    test.addAll(low); 
    Object[] newList = test.toArray(); 

ありアレイと簡単な方法は、おそらくですが、私は=一番簡単だったことを考える可能性が1である)