2017-01-12 15 views
-4

配列リストには、その中で最小の番号が出現する前後にアスタリスクが付いているはずです。私はデバッグし、すべての変数は正しい値を保持していますが、何らかの理由で値を追加しません。私はあなたが行くようにlistを構築する方が良いと思いArrayListに要素を追加しない

int smallest = array[0]; 

     for (int i = 0; i < size; i++) 
      if (array[i] < smallest) 
       smallest = array[i]; 

       String smallestString = String.valueOf(smallest); 

     ArrayList<String> list = new ArrayList<String>(); 

     for(int i = 0;i < size; i++) 
      list.add(Integer.toString(array[i])); 


     for (int i = 0; i < list.size(); i++) 
     if (smallestString.equals(list.get(i))) { 
      list.add(i, "*****"); 
      list.add(i + 2, "*****"); 
     } 

      System.out.println("\n" + list); 

      return smallest; 
+2

'{' '}'ブロックを使用してループを区切る試してみてください、それが少なく、エラーになります-prone。 – Berger

+0

前後に反復する場合、要素を追加すると現在の要素の後ろのすべてが右に移動するので、つまりリストが '1,2,3'ならば' * 'を追加するので、より大きなステップを踏む必要があることに注意してくださいインデックス0と2は '*、1、*、2,3 'となり、次の要素(' 2')はインデックス3にあります。 – Thomas

+0

@Thomasなぜ2番目の行を追加したのですか?アスタリスクの –

答えて

-1

は、ここに私のコードです。 - これは反復しながら、リストを変更する一般的に

  • 遅い

    1. ライブラリは1で、すべてをシフトすることを余儀なくされています(ArrayList実装である)listに新しい要素を挿入するあなたの方法には2つの問題がありますエラーが発生しやすいです。

    次のように私は、コードを書き換えるになります。出力は次のようになり

    import java.util.ArrayList; 
    import java.util.Arrays; 
    import java.util.List; 
    
    public class ArrayListInsert { 
    
        public static void main(String[] args) { 
         Integer[] array = new Integer[]{1, 5, 2, 6, 7}; 
    
         int smallest = array[0]; 
    
         for (int i = 0; i < array.length; i++) 
          if (array[i] < smallest) 
           smallest = array[i]; 
    
         String smallestString = String.valueOf(smallest); 
    
         List<String> list = new ArrayList<String>(); 
    
         for(int i = 0; i < array.length; i++) { 
          if (smallestString.equals(String.valueOf(array[i]))) { // be careful! 
           list.add("*****"); 
           list.add(Integer.toString(array[i])); 
           list.add("*****"); 
          } else { 
           list.add(Integer.toString(array[i])); 
          } 
         } 
    
         System.out.println("array is\n" + Arrays.deepToString(array)); 
         System.out.println("list is\n" + list); 
    
    //   return smallest; 
    
        } 
    
    } 
    

    array is 
    [1, 5, 2, 6, 7] 
    list is 
    [*****, 1, *****, 5, 2, 6, 7] 
    
  • +0

    あなたは 'List'として宣言していますが、' new ArrayList'を書きますか?また、 'deepToString'と' toString'との違いは何ですか? –

    +0

    @ J.melb - これは故意に行われます。たとえば、「Effective Java、2nd Ed」を読むことができます。より詳細を知るためにJoshua Blochによる。 (Item 52:オブジェクトをインタフェースで参照する) – leeyuiwah

    +0

    @ J.melb - 本から... "より一般的には、オブジェクトを参照するためのクラスである ではなく、インタフェースの使用を優先する必要があります。 オブジェクトのクラスを参照する必要があるのは、コンストラクタを使用してオブジェクトを作成するときだけです。 インターフェイスをタイプとして使用する習慣に入ると、あなたのプログラムはより柔軟になります」 – leeyuiwah

    関連する問題