【问题标题】:problem filling arrays with for loops用for循环填充数组的问题
【发布时间】:2011-09-14 04:54:20
【问题描述】:

我有一个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有关

【问题讨论】:

    标签: android arrays android-activity for-loop


    【解决方案1】:

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

    【讨论】:

    • 没有问题 - 直到我模拟并运行了您的项目,我才弄明白。
    【解决方案2】:

    我有点不确定您的问题,这里有大量代码,而且似乎有 2 个不相关的问题。至于数组索引问题:

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

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

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

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

    【讨论】:

    • 对不起,我现在已经清理了问题并删除了不相关的代码和其他问题。我想我的问题是为什么它在for (int i=0; i&lt;8; i++) 时会失败但在for (int i=0; i&lt;7; i++) 时工作正常?
    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多