проблема заполнения массивов с помощью циклов for - PullRequest
0 голосов
/ 13 июня 2011

у меня есть boolean[], checkbox[] и view[] (impactsb[], impactsc[], impactsv[] соответственно), каждый из которых имеет длину 8. Я знаю, что первая позиция равна 0,следующий - 1 и т. д., и последняя позиция - 7. По какой-то причине мое приложение вылетает, когда вы пытаетесь что-то сделать с последней позицией, другими словами, 0-6 работает нормально, 7 никогда не работает.Что я делаю не так?

Вот мой код для этого класса, который является его собственной частью основной деятельности в виде вкладки.извините за небрежное форматирование.

package com.citsci.mardeb;

... imports ....

public class Impacts extends Activity implements View.OnClickListener
    {
    static boolean[] impactsb = new boolean[] {false, false, false, false, false, false, false, false};

@Override
public void onCreate (Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.impacts);

  View[] impactsv = new View[]
     {
    findViewById(R.id.gas_oil),
        findViewById(R.id.ghost_fishing),
        findViewById(R.id.marsh_damage),
        findViewById(R.id.nav_haz),
        findViewById(R.id.shell_damage),
        findViewById(R.id.waste_pollution),
        findViewById(R.id.wild_entang),
        findViewById(R.id.other)
        };

  CheckBox[] impactsc = new CheckBox[impactsv.length];

  for (int i = 0; i < 8; i++)
     {
     impactsc[i] = (CheckBox) impactsv[i];
     impactsc[i].setTag(i);
     impactsc[i].setOnClickListener(this);
     }

}// end of onCreate

@Override
public void onClick(View v)
    {
  switch ((Integer)v.getTag())
    {
     case (0):
        impactsb[0] =! impactsb[0];
        break;
     case (1):
        impactsb[1] =! impactsb[1];
        break;
     case (2):
        impactsb[2] =! impactsb[2];
        break;
     case (3):
        impactsb[3] =! impactsb[3];
        break;
     case (4):
        impactsb[4] =! impactsb[4];
        break;
     case (5):
        impactsb[5] =! impactsb[5];
        break;
     case (6):
        impactsb[6] =! impactsb[6];
        break;
     case (7):
        impactsb[7] =! impactsb[7];
        EditText view = (EditText) findViewById(R.id.other);
        if (view.getVisibility() == View.INVISIBLE)
                view.setVisibility(View.VISIBLE);
        else
            view.setVisibility(View.INVISIBLE);
        break;
        }
    }
}// end of Impacts.class

коды ошибок:

ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1768    
ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) line: 1784 
ActivityThread.access$1500(ActivityThread, ActivityThread$ActivityClientRecord, Intent) line: 123   
ActivityThread$H.handleMessage(Message) line: 939

это относится к к этому предыдущему вопросу и к другому предыдущему вопросу

Ответы [ 2 ]

3 голосов
/ 14 июня 2011

Ваши проблемы не в индексах или длинах массивов.
Проблема в том, что у вас есть TextView с именем "other" и CheckBox с именем "other", а findViewById не знает, какой из них получить при вызове.
Измените идентификатор TextView на «other_text», и ваши проблемы будут решены.

1 голос
/ 14 июня 2011

Я немного не уверен в вашем вопросе, здесь тонна кода и что-то вроде 2 не связанных вопросов. Что касается вопроса индекса массива:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | Длина = 8

Итак, длина = 8, если вы делаете цикл for, как:

for (int i=0; i<8; i++)

значения будут варьироваться от 8 до 0, потому что вы использовали меньше чем. Так что просто установите длину в размер, который вы создали, и напишите свои циклы for, как указано выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...