Объявление переменной в цикле for с использованием индекса (i) - PullRequest
0 голосов
/ 02 января 2012

Я так близок к тому, чтобы заставить этот проект работать, но я застрял в одной вещи, которая сводит меня с ума, и я не могу найти ничего в моем исследовании, которое работает.

Что мне нужночтобы сделать, это объявить новую переменную каждый раз, когда цикл for проходит через набор записей, но мне нужно использовать значение индекса (i) в имени переменной.

Строка, с которой мне нужна помощь, это Bottles o[i] = new Bottles();

Мне нужно определять новую переменную каждый раз, когда цикл for снова проходит, например, мои переменные должны быть o1, o2, o3 и т. Д. Я получаю синтаксическую ошибку в [i]прямо сейчас, и я не могу понять, как это сделать.

Есть мысли о том, что мне здесь не хватает?

private void getBottles() {
        try {
            m_bottles = new ArrayList<Bottles>();
            for (int i = 0; i < bottleNamesMap.size(); i++) {
                Bottles o[i] = new Bottles();
                o[i].setbottleID(bottleIntMap.get("bottleID" + i));
                o[i].setname_abbr(bottleNamesMap.get("name" + i));
                o[i].setorigin(bottleNamesMap.get("origin" + i));
                o[i].setbottlePicture(bottleNamesMap.get("bottlePicture" + i));
                o[i].setprice_reported(bottleNamesMap.get("price" + i));
                o[i].setdistillery(bottleNamesMap.get("distillery" + i));
                o[i].setagg_score(bottleIntMap.get("aggscore" + i));
                m_bottles.add(o[i]);
                Thread.sleep(2000);
                Log.i("ARRAY", "" + m_bottles.size());
            }
          } catch (Exception e) {
            Log.e("BACKGROUND_PROC", e.getMessage());
          }
          runOnUiThread(returnRes);
      }

Ответы [ 3 ]

5 голосов
/ 02 января 2012
 Bottles o[i] = new Bottles();

должно быть:

  Bottles o = new Bottles();

Затем сбросьте [i].Новое ключевое слово будет создавать новый объект каждую итерацию.

            Bottles o = new Bottles();
            o.setbottleID(bottleIntMap.get("bottleID"+i));
            o.setname_abbr(bottleNamesMap.get("name"+i));
            o.setorigin(bottleNamesMap.get("origin"+i));
            o.setbottlePicture(bottleNamesMap.get("bottlePicture"+i));
            o.setprice_reported(bottleNamesMap.get("price"+i));
            o.setdistillery(bottleNamesMap.get("distillery"+i));
            o.setagg_score(bottleIntMap.get("aggscore"+i));
            m_bottles.add(o);
0 голосов
/ 02 января 2012

Вам не нужен индекс в имени переменной - это только для компилятора. Вы могли бы просто сказать

Бутылки с бутылками = новые Бутылки ();

тогда используйте бутылки везде, где вы используете o [i];

Каждый раз в цикле будут создаваться новые бутылки - несмотря на то, что имя переменной совпадает, это отдельный объект, и вы можете проиндексировать его позже через ArrayList.

0 голосов
/ 02 января 2012

Просто используйте:

Bottles o = new Bottles();
...