2013-11-26 3 views
0

я есть этот простой метод:ArrayList загрузка дает мне интересный вывод

public static Map<String, ArrayList<String>> szamolando = new HashMap<String,ArrayList<String>>(); 
    ArrayList<String> outputs = new ArrayList<String>(); 

for(int i = 0;i<2;i++){ 
tombFeltolt("a"+i); 
} 
public void tombFeltolt(String kimenet) { 
     outputs.clear(); 
     System.out.println("1"); 
     outputs.add(min); 
     System.out.println("2"); 
     outputs.add(max); 
     System.out.println("3"); 
     outputs.add("65535"); 

     szamolando.put(kimenet, outputs); 
    } 

, чем у меня есть этот выход: 1 2 3 2

почему я получил это Что случилось с моим методом ?Спасибо за ответ!

Edit: хорошо здесь полный код:

public static Map<String, ArrayList<String>> szamolando = new HashMap<String, ArrayList<String>>(); 
    static ArrayList<String> outputs = new ArrayList<String>(); 
    static String min, max; 

    public static void main(String[] args) { 

     for (int i = 0; i < 2; i++) { 
      if (i == 0) { 
       min = "10"; 
       max = "20"; 
      } else { 

       min = "9"; 
       max = "8"; 
      } 
      tombFeltolt("a" + i); 
     } 
     for (String name : szamolando.keySet()) { 

      String key = name.toString(); 
      String value = szamolando.get(name).toString(); 
      System.out.println("ASS " + key + " " + value); 

     } 
    } 

    public static void tombFeltolt(String kimenet) { 
     outputs.clear(); 
     System.out.println("1"); 
     outputs.add(min); 
     System.out.println("2"); 
     outputs.add(max); 
     System.out.println("3"); 
     outputs.add("65535"); 

     szamolando.put(kimenet, outputs); 
    } 

и вот мой результат:

ASS a0 [9, 8, 65535] ASS a1 [9, 8, 65535]

+2

Что такое мин и макс? – Adarsh

+0

Какой результат вы ожидали? Вы имеете в виду ваши вызовы 'println' или что-то еще? – rgettman

+0

Что вы хотите, чтобы выход был? Прямо сейчас (чтобы указать на очевидное) вы просто печатаете то, что вы жестко закодировали строки в своих операторах println. –

ответ

1

вы должны изменить это:

static ArrayList<String> outputs = new ArrayList<String>(); 

к этому:

static ArrayList<String> outputs = null; 

и поставить эту линию в 'для' петли:

outputs = new ArrayList<String>(); 
+0

Да, кажется, что это была ошибка, теперь я получаю правильный выход! Спасибо! – user2682360

1

Это источник вашей проблемы Когда вы сделаете ясный, он очистит ArrayList, который все еще ссылается к существующему массиву ArrayList, который очистит сохраненный список, а также сохранит ссылку. если хотите 10, 20, 65535 использовать новый список каждый раз.

outputs.clear(); 
Смежные вопросы