2017-01-12 129 views
-4

我的數組列表應該在每個出現最小數字之前和之後有一行星號。我已調試和所有變量都保持正確的值,但由於某種原因它不會添加值。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

我認爲這是更好地構建list,當您去。您插入到list一個新元素(這是一個ArrayList實現)的方式有兩個問題:

  1. 圖書館被迫通過一個轉移的一切 - 這是緩慢的
  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瞭解更多細節。 (第52項:通過它們的接口引用對象) – leeyuiwah

+0

@ J.melb - 從書中......「更一般地說,您應該傾向於使用接口而不是類來引用對象,如果存在適當的接口類型,那麼 參數,返回值,變量和字段都應該使用接口類型聲明爲 。只有當你真的需要引用 對象的類時,纔會使用構造函數創建它。。。。。 如果你養成使用接口作爲類型的習慣,你的程序將更加靈活。「 – leeyuiwah