java - Arraylist 索引越界

标签 java regex for-loop arraylist collections

作业要求读取两个文件,并将学生的信息分别输入到两个ArrayList中。 s。然后我需要执行两个功能:组合两个列表并对组合列表进行排序。

public abstract class Tools {
    public static ArrayList<JUPASStudent> readJUPASFile(String f) throws Exception {
        ArrayList<JUPASStudent> jList = new ArrayList<JUPASStudent>();

        BufferedReader readbuffer = null;
        readbuffer = new BufferedReader(new FileReader(f));
        String strRead;
        while ((strRead = readbuffer.readLine()) != null) {
            String splitarray[] = strRead.split("/t");
            String firstentry = splitarray[0];
            String secondentry = splitarray[1];
            JUPASStudent x = new JUPASStudent(firstentry, Double.parseDouble(secondentry));
            jList.add(x);
        }

        readbuffer.close();
        return jList;
        }

    public static ArrayList<NonJUPASStudent> readNonJUPASFile(String f) throws Exception {
        ArrayList<NonJUPASStudent> njList = new ArrayList<NonJUPASStudent>();

        BufferedReader readbuffer = null;
        readbuffer = new BufferedReader(new FileReader(f));
        String strRead;
        while ((strRead = readbuffer.readLine()) != null) {
            String splitarray[] = strRead.split("/t");
            String firstentry = splitarray[0];
            String secondentry = splitarray[1];
            NonJUPASStudent x = new NonJUPASStudent(firstentry, Double.parseDouble(secondentry));
            njList.add(x);
        }

        readbuffer.close();
        return njList;
    }

    public static ArrayList<Student> combineArrayList(ArrayList<JUPASStudent> S1, ArrayList<NonJUPASStudent> S2) {
        ArrayList<Student> sList = new ArrayList<Student>();

        for (int i = 0; i < S1.size(); i++)
            sList.add(S1.get(i));
        for (int i = 0; i < S2.size(); i++) 
            sList.add(S2.get(i));

        return sList;
    }

    public static ArrayList<Student> sort(ArrayList<Student> s){
        for (int i = 0; i < s.size()-1; i++) {
            for (int j = 0; i < s.size()-i-1; j++) {
                if (s.get(j).getResult() > s.get(j+1).getResult()) {
                    Student Temp = s.get(j);
                    s.set(j, s.get(j+1));
                    s.set(j+1, Temp);
                }
            }
        }
        return s;
    }
}

但是,我不断收到“索引 1 超出长度 1 的范围”

最佳答案

在内部循环中,您定义了对错误计数器的约束。而不是:

for (int j = 0; i < s.size()-i-1; j++)

应该有:

for (int j = 0; j < s.size()-i-1; j++)

关于java - Arraylist 索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425894/

相关文章:

javascript - JavaScript 字符串替换中的子匹配组引用是否有分隔符/消歧语法?

javascript - 如何在我的正则表达式中放置换行符以使其更具可读性?

android - Android list 的 Intent 过滤器中的正则表达式

java - 如何将for循环迭代回它在java中访问的最后一个索引

java - 迭代二维数组的偏移量

java - 内存不足 : Perm Gen Space

java - 如何仅使用一个键值将对象列表保存到 Redis 中?

java - 在 for 循环中使用相同变量名初始化多个对象时会发生什么?

Java应用程序生命周期

java - Oracle 应用服务器上每个 Java VM 的单独 GC 日志文件