java - 线程 "main"java.lang.ArrayIndexOutOfBoundsException : 1. 中的异常 在此之前它正在工作,然后我得到了这个

标签 java runtime runtime-error

它似乎指向loadDogs();和 items[1],但我没有看到任何问题。它之前使用相同的代码工作,然后我开始出现这些错误。我之前备份过这段代码,但是当我使用备份的时候;结果还是有的。我尝试修复了一个小时,但它并没有消失。虽然运行它会在 eclipse 中抛出错误,但它可以编译。

    public class DogCompetitionManager     {
    private final String DOGS_FILE = "res/dogs.txt";
    private final String COURSE_FILE = "res/courses.txt";

    private ArrayList<Dogs>     dogsList;
    private ArrayList<Courses>  courseList;

    public DogCompetitionManager()
    {
        loadDogs();
        loadCourses();
        runAdministration();
    }

    private void loadDogs()
    {   // creates a dogsList array
        dogsList = new ArrayList<Dogs>();
        BufferedReader inFile = null;

        try
        {
            inFile = new BufferedReader(new FileReader(DOGS_FILE));
            String line = inFile.readLine();
            while(line != null)
            {
                String[] items;
                items = line.split(" ");

                dogsList.add(new Dogs(items[0],
                            items[1],
                            Double.parseDouble(items[2]),
                            Integer.parseInt(items[3]),
                            items[4]));
                line = inFile.readLine();
            }
            inFile.close();
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }    
}

最佳答案

永远不要相信用户输入!

String[] items;
items = line.split(" ");

dogsList.add(new Dogs(items[0],
                        items[1],
                        Double.parseDouble(items[2]),
                        Integer.parseInt(items[3]),
                        items[4]));

在这里,您分割了一个输入行并期望它具有特定的格式。那是相当不稳定的。您应该首先确保该行实际上具有该格式,如果没有,则进行相应的处理。

至少您应该对错误进行一些输出。然后,您可以忽略该行并处理文件的其余部分,也可以抛出异常,中止该过程。取决于您的要求。

一个简单的检查是查看String[]在分割后是否有与您期望的一样多的项目(或者可能为空)。

示例:

if( null == items || items.length < 5 ) { 
    // 1. LOG ERROR

    // To ignore line and move on:
    line = inFile.readLine();
    continue;
}

更复杂的方法是使用某种正则表达式来查看是否有数字、您期望它们的位置等。我还建议在将字符串转换为数值时捕获解析错误。

关于java - 线程 "main"java.lang.ArrayIndexOutOfBoundsException : 1. 中的异常 在此之前它正在工作,然后我得到了这个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931591/

相关文章:

Java程序编辑文件以选择记录

java - 1/10 次 java 在 JFileChooser.showOpenDialog 上崩溃

generics - 未确定的泛型类型在 ghci 的运行时如何表示

Java:如何在编译时找到方法的调用者?

java - 在 KeyStore.load() 中使用日语密码会导致 java.io.IOException : Keystore was tampered with, 或密码不正确

java - 使用 ITextRenderer pdf 中没有中文单词

c# - 为什么 ISerializationSurrogate.SetObject 返回一个对象并获取一个对象来填充?

go - 为什么我的两个 slice 之一会因“运行时错误:索引超出范围”而感到 panic ?

vba - 运行时错误 1004 : MS Excel is refreshing some data. 请稍后使用查询重试

android - 如何解决这些错误 : acAppName=/system/bin/surfaceflinger and org. json.JSONObject cannot be converted to JSONArray?