用for循环填充数组的问题

时间:2011-06-13 19:59:01

标签: android arrays android-activity for-loop

我有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

这与this previous questionthis other previous question

有关

2 个答案:

答案 0 :(得分:3)

您的问题不是索引或数组长度 问题是你有一个名为“other”的TextView和一个名为“other”的CheckBox,而findViewById在你调用它时不知道要抓哪个。 将TextView id更改为“other_text”,您的问题就会得到解决。

答案 1 :(得分:1)

我对你的问题有点不确定,这里有大量的代码,看起来像是两个无关的问题。至于数组索引问题:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 长度= 8

所以长度= 8,如果你做一个for循环,如:

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

值的范围是8个数字0-7,因为你使用的是小于0。所以只需将长度设置为您创建的大小,然后像上面那样编写for循环。