“什么是”呢;无效索引90大小为90“;在android中

“什么是”呢;无效索引90大小为90“;在android中,android,button,Android,Button,我得到一个错误“无效索引90大小为90”如何修复这个问题 package com.example.micro; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.InputStreamReader; import java.

我得到一个错误“无效索引90大小为90”如何修复这个问题

package com.example.micro;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter; 
import java.io.InputStreamReader;    
import java.util.ArrayList;
import java.util.StringTokenizer;    
import android.app.Activity;    
import android.os.Bundle;
import android.os.Environment;    
import android.view.View;    
import android.view.View.OnClickListener;    
import android.widget.Button;    
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        task_final();

    }
    //  Button btn;
        //btn = (Button) findViewById(R.id.button1);
        //btn.setOnClickListener(new OnClickListener() {
            //public void onClick(View v) {
                // write on SD card file data in the text box
        public void task_final()
        {
            ArrayList<String> al = new ArrayList<String>();
            ArrayList<String> s1 = new ArrayList<String>();
            String aDataRow = "";
            StringTokenizer st = null;
            String start=null;
            String mid=null;
            String end=null;
            String sm_time,sn_time,mm_time,mn_time,em_time,en_time;
            try {
                File dir = Environment.getExternalStorageDirectory();
                File file = new File(dir, "/Notes/task_name5.csv");
                FileInputStream fIn = new FileInputStream(file);
                BufferedReader myReader = new BufferedReader(new InputStreamReader(fIn));
                FileWriter outFile = new FileWriter("/sdcard/Notes/delay.csv");  
                BufferedWriter outStream = new BufferedWriter(outFile);


                //ArrayList<String> e1 = new ArrayList<String>();
                while ((aDataRow = myReader.readLine()) != null) {
                    //aBuffer += aDataRow + "\n";
                    st = new StringTokenizer(aDataRow,",");
                    while (st.hasMoreTokens()) {
                    al.add(st.nextToken());
                      }//while
                }//while
                int i=0,j;

                do
                {
                    start=al.get(i);
                    sm_time=al.get(i+1);
                    sn_time=al.get(i+2);
                    mid=al.get(i+3);
                    mm_time=al.get(i+4);
                    mn_time=al.get(i+5);
                    j=i+3;

                    while((start.equals(mid)))
                    {
                           j+=3;
                           mid=al.get(j);

                    }
                    end=al.get(j-3);
                    em_time=al.get(j-2);
                    en_time=al.get(j-1);
                  /*  if(i!=(j-3)){
                    System.out.print(start);
                    System.out.print(" ");
                    System.out.print(sm_time);
                    System.out.print(" ");
                    System.out.print(sn_time);
                    System.out.print("\n");
                    System.out.print(end);
                    System.out.print(" ");
                    System.out.print(em_time);
                    System.out.print(" ");
                    System.out.print(en_time);
                    System.out.print("\n");
                    }*/
                       if(i!=(j-3))
                       {
                           s1.add(start);
                           s1.add(sm_time);
                           s1.add(sn_time);
                           s1.add(end);
                           s1.add(em_time);
                           s1.add(en_time);
                       }
                    i=j;
                }while(i<al.size());

                for (int k = 0; k < s1.size(); k+=3)  
                {
                outStream.write(s1.get(k));
                outStream.write(",");    
                outStream.write(s1.get(k+1));
                outStream.write(",");
                outStream.write(s1.get(k+2));
                outStream.write("\n");

                }
                outStream.close(); 
            }
            catch (Exception e)
            {
                Toast.makeText(getBaseContext(), e.getMessage(),
                        Toast.LENGTH_SHORT).show();
            }
    }
    }
package com.example.micro;
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileWriter;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.StringTokenizer;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Environment;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.Toast;
公共类MainActivity扩展了活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
任务_final();
}
//按钮btn;
//btn=(按钮)findViewById(R.id.button1);
//btn.setOnClickListener(新的OnClickListener(){
//公共void onClick(视图v){
//在文本框中写入SD卡文件数据
公开作废任务_final()
{
ArrayList al=新的ArrayList();
ArrayList s1=新的ArrayList();
字符串aDataRow=“”;
StringTokenizer st=null;
字符串start=null;
字符串mid=null;
字符串结束=null;
字符串sm_时间、sn_时间、mm_时间、mn_时间、em_时间、en_时间;
试一试{
File dir=Environment.getExternalStorageDirectory();
File File=新文件(dir,“/Notes/task_name5.csv”);
FileInputStream fIn=新的FileInputStream(文件);
BufferedReader myReader=新的BufferedReader(新的InputStreamReader(fIn));
FileWriter outFile=新的FileWriter(“/sdcard/Notes/delay.csv”);
BufferedWriter outStream=新的BufferedWriter(outFile);
//ArrayList e1=新的ArrayList();
而((aDataRow=myReader.readLine())!=null){
//aBuffer+=aDataRow+“\n”;
st=新的StringTokenizer(aDataRow,“,”);
而(st.hasMoreTokens()){
al.add(st.nextToken());
}//当
}//当
int i=0,j;
做
{
start=al.get(i);
sm_时间=al.get(i+1);
sn_time=al.get(i+2);
mid=al.get(i+3);
mm_time=al.get(i+4);
mn_时间=al.get(i+5);
j=i+3;
而((start.equals(mid)))
{
j+=3;
mid=al.get(j);
}
end=al.get(j-3);
em_时间=al.get(j-2);
en_时间=al.get(j-1);
/*如果(i!=(j-3)){
系统输出打印(启动);
系统输出打印(“”);
系统输出打印(sm_时间);
系统输出打印(“”);
系统输出打印(序号时间);
系统输出打印(“\n”);
系统输出打印(结束);
系统输出打印(“”);
系统输出打印(em_时间);
系统输出打印(“”);
系统输出打印(en_时间);
系统输出打印(“\n”);
}*/
如果(i!=(j-3))
{
s1.添加(开始);
s1.添加(sm_时间);
s1.添加(序号时间);
s1.加入(完);
s1.添加(em_时间);
s1.添加(en_时间);
}
i=j;

}而(i我认为您需要更改for循环

for (int k = 0; k < s1.size(); k+=3) 

Java中的索引从0开始,一个包含90个元素的数组列表的索引范围从0到89。尝试索引元素90会导致此错误

您没有指定确切的获取位置,但我假设是这个循环:

for (int k = 0; k < s1.size(); k+=3)
确保所有索引在每次迭代中都有效

另一个循环也有未经检查的数组元素访问。这当然也是一个bug,尽管这样的bug可能不会导致所有输入都出现异常。

试试这种方法

换行

for (int k = 0; k < s1.size(); k+=3) 
for(int k=0;k

for(int k=0;k
除了其他人提到的k-loop外,i-loop也可能关闭:

do {
    start=al.get(i);
    sm_time=al.get(i+1);
    sn_time=al.get(i+2);
    mid=al.get(i+3);
    mm_time=al.get(i+4);
    mn_time=al.get(i+5);

    ...

} while (i < al.size());
do{
start=al.get(i);
sm_时间=al.get(i+1);
sn_time=al.get(i+2);
mid=al.get(i+3);
mm_time=al.get(i+4);
mn_时间=al.get(i+5);
...
}而(i
这意味着大小为90,您在第90个位置访问数据。如果大小为90…位置将为89。因为它从0开始。
for (int k = 0; k + 2 < s1.size(); k+=3)
for (int k = 0; k < s1.size(); k+=3) 
for (int k = 0; k < s1.size()-3; k+=3) 
do {
    start=al.get(i);
    sm_time=al.get(i+1);
    sn_time=al.get(i+2);
    mid=al.get(i+3);
    mm_time=al.get(i+4);
    mn_time=al.get(i+5);

    ...

} while (i < al.size());