Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
if语句中的java.lang.ArrayIndexOutOfBoundsException错误_Java - Fatal编程技术网

if语句中的java.lang.ArrayIndexOutOfBoundsException错误

if语句中的java.lang.ArrayIndexOutOfBoundsException错误,java,Java,我发现了错误 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 28 at assignment.assgn1.main(assgn1.java:44) 如果有人能指出错误,我将不胜感激 package assignment; import java.io.FileReader; import java.io.IOException; import java

我发现了错误

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 28
    at assignment.assgn1.main(assgn1.java:44)
如果有人能指出错误,我将不胜感激

    package assignment;

    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;

    import com.opencsv.CSVReader;
    import java.io.FileNotFoundException;

public class assgn1 {

public static void main(String[] args) throws IOException
{
    try{

        CSVReader csvReader = new CSVReader(new FileReader("E:/AviationData.txt"),'\t','\n');
        PrintWriter NYreports = new PrintWriter("E:/NYReports.txt");
        String [] nextLine;
        int x;
        int sum=0;
        double totalFatal=0;
        Integer largest = 0;
        Integer smallest = 0;
        String [] token = null;
        //read first line, but it will not be counted with the rest of the records
        nextLine = csvReader.readNext();
        //create a map for unique Broad Phase in flight fields
        Map<String, Integer> broadPhase = new HashMap <String, Integer>();
        //create an array list that will take in integer values of Fatal Injuries
        ArrayList <Integer> intList = new ArrayList<Integer>();
        while ((nextLine = csvReader.readNext()) !=null){
            sum++;

            String field = nextLine[0];
            //using regex values!
            token = field.split("\\s\\|\\s");
//for (String s: token){
//System.out.println(s);
//}
 if(token[28].equals(" ")){
broadPhase.put(token[28],0);
 }
  if(!token[28].equals(" ") && !token[28].equals("")){
broadPhase.put(token[28], 1);
 }

   //search for Fatal Injury values
   if(!token[23].isEmpty()){

  x=Integer.parseInt(token[23]);
  //add to ArrayList
   intList.add(x);
   totalFatal = x + totalFatal;
   }

    if(token[4].contains(", NY") && token[5].contains("/2015")){

 NYreports.println(nextLine[0]);


    }

        }

                for(int i =0; i<intList.size()-1; i++){
                if (intList.get(i) > largest);
                largest = intList.get(i);
                 if (intList.get(i)< smallest)
                smallest = intList.get(i);
                }

                System.out.println("There are " + sum + " records");

                System.out.println("There are " + (broadPhase.size())+" unique values in Broad Phase of Flight");
                 totalFatal = (totalFatal/sum);
                 System.out.println(largest + " is the largest number of Fatal injuries");
                 System.out.println("The average of Fatal injuries is " + totalFatal);
            NYreports.close();
            csvReader.close();
    }
    catch (FileNotFoundException ex){
        System.out.println("File not Found");
    }
}
包分配;
导入java.io.FileReader;
导入java.io.IOException;
导入java.io.PrintWriter;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Map;
导入com.opencsv.CSVReader;
导入java.io.FileNotFoundException;
公共类助理1{
公共静态void main(字符串[]args)引发IOException
{
试一试{
CSVReader CSVReader=新的CSVReader(新的文件读取器(“E:/AviationData.txt”),“\t',“\n”);
PrintWriter NYreports=新的PrintWriter(“E:/NYreports.txt”);
字符串[]下一行;
int x;
整数和=0;
双倍总死亡率=0;
最大整数=0;
最小整数=0;
字符串[]标记=null;
//读取第一行,但它不会和其他记录一起计数
nextLine=csvReader.readNext();
//为飞行场中独特的宽相位创建地图
Map broadPhase=newhashmap();
//创建一个数组列表,该列表将接受致命伤害的整数值
ArrayList intList=新的ArrayList();
而((nextLine=csvReader.readNext())!=null){
sum++;
字符串字段=下一行[0];
//使用正则表达式值!
令牌=字段。拆分(\\s\\\\\s”);
//for(字符串s:标记){
//系统输出打印项次;
//}
if(标记[28]。等于(“”){
broadPhase.put(令牌[28],0);
}
如果(!token[28].equals(“”)&!token[28].equals(“”){
broadPhase.put(令牌[28],1);
}
//搜索致命伤害值
如果(!token[23].isEmpty()){
x=整数.parseInt(标记[23]);
//添加到ArrayList
添加(x);
totalFatal=x+totalFatal;
}
if(令牌[4]。包含(“,NY”)&令牌[5]。包含(“/2015”)){
NYreports.println(nextLine[0]);
}
}
对于(int i=0;i最大);
最大=intList.get(i);
if(intList.get(i)<最小值)
最小=intList.get(i);
}
System.out.println(“存在“+总和+”记录”);
System.out.println(“在飞行的宽相位中有”+(broadPhase.size())+“唯一值”);
totalFatal=(totalFatal/总和);
System.out.println(最大+“是最大的致命伤害数”);
System.out.println(“致命伤害的平均值为”+总致命性);
NYreports.close();
csvReader.close();
}
捕获(FileNotFoundException ex){
System.out.println(“未找到文件”);
}
}
}

错误在写入if(标记[28].equals(“”){.的行上。 我可以改变什么来避免它。如果我使用的方法可以改变的话

ArrayIndexOutOfBoundsException通常在尝试访问时发生 数组中不存在的索引

,即.index>length-1(因为java中的数组是基于0的)

要避免此错误,请确保只使用有效的索引,这些索引是

0= 在当前上下文中,您可能需要添加额外的检查,以确保数组包含该索引以及正常的if条件

差不多

if(token.length > 28 && token[28].equals(" ")){
   broadPhase.put(token[28],0);
 }

该错误是因为
标记[28]
不存在。换句话说,您的
split()
调用返回的数组的长度没有您认为的那么长。我会检查您的输入,看看您的输入是否正确

另一方面,您的方法似乎非常……粗糙且编码很硬。假设您知道令牌存储的确切顺序,那么避免
ArrayIndexOutOfBounds异常的更好方法是使用for each循环或normal for循环遍历令牌数组

然后可以在循环遍历每个部分时对其进行解析

例如:

for (int i = 0; i < tokens.length; i++) {
    // based on the i value, parse a different way
}
for(int i=0;i
这只是意味着
标记数组中的第29个条目不存在。请记住,数组索引从0开始。在从数组中访问某个索引之前,请进行长度检查