2017-04-26 5 views
-1
public boolean remove(int x) { 
    int i; 
    for (i = 0; (i < size) && (x != array[i]); i++) { 
     if (i == size) { 
      return false; 
     } else { 
      size--; 
      array[i] = array[size]; 
      return true; 
     } 
    } 
} 

申し訳ありません。私はタブレットにこれを入力しています。これは正しいですが、実装後にソートされます。誰かがなぜこれが私に説明できますか?

+3

あなたは達成するために何をしようとしていますか? – Oswald

+0

削除したものの代わりに、配列の最後の項目を削除し、それをスロットに挿入します。それはあなたが意図したものではありませんか? –

答えて

0

配列がremove後にソートされている理由を求めている場合が呼ばれた後、答えは:それはないです。

public class Remove { 

    private final int[] array = new int[10]; 
    private int size = 0; 

    public Remove(int... elements) { 
     for (int el: elements) 
      array[size++] = el; 
    } 

    public boolean remove(int x) { 
     int i; 
     for (i = 0; (i < size) && (x != array[i]); i++) 
      ; 
     if (i == size) { 
      return false; 
     } else { 
      size--; 
      array[i] = array[size]; 
      return true; 
     } 
    } 

    public String toString() { 
     return Arrays.toString(Arrays.copyOf(array, size)); 
    } 

    public static void main(String[] args) { 
     Random random = new Random(); 
     Remove remove = new Remove(random.ints(8, 1, 1000).toArray()); 
     System.out.println(remove); 
     remove.remove(remove.array[3]); 
     System.out.println(remove); 
    } 
} 

結果:

[515, 621, 343, 883, 463, 745, 966, 70] 
[515, 621, 343, 70, 463, 745, 966] 
関連する問題