首页 > 解决方案 > 我想运行我的代码,但终端告诉索引超出范围。可能是因为 ArrayList methode 得到 ot smth 这样

问题描述

我正在尝试运行我的代码。但终端告诉:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at CF455A.main(CF455A.java:25)

第 25 个字符串是: game.remove(game.get(max+1)); 我的代码:

import java.util.*;
import java.lang.*;
import java.io.*;

public class CF455A {
 public static void main(String args[]) throws java.lang.Exception {
     Scanner in = new Scanner (System.in);
     int n = in.nextInt();
     int max = 0;
     ArrayList<Integer> game = new ArrayList<Integer>();

    for(int i = 0; i < n; i++){
        int t = in.nextInt();
        game.add(i, t);
    }

    int counter = 0;

    while(game.size()>0){
        for(int j = 0; j < game.size(); j++){
            if(max <= (int)game.get(j)){max=j;}
            for(int i = 0; i < game.size(); i++){
                counter = counter + (int)game.get(max);
                game.remove(game.get(max));
                game.remove(game.get(max+1));
                game.remove(game.get(max-1));
            }
        }

    }
    System.out.print(counter);
    in.close();
}

我认为这是因为 ArrayList 或类似game.get();or的方法game.remove();。我只是想更改 ArrayList 的元素之一的值

项目清单

标签: javacompilationvisual-studio-codeindexoutofboundsexception

解决方案


根据逻辑:-如果我将输入输入为:- 5 1 2 3 4 5 然后首先通过:- game.size() = 5; while 条件为 true -> 并尝试删除索引 (1,0,-1) 处的项目。因此 (-1) IndexOutOfBounds失败。请按如下方式进行空值检查:-

import java.util.*;
import java.lang.*;
import java.io.*;

public class TestMemberOuter1 {
    public static void main(String args[]) throws java.lang.Exception {
        Scanner in = new Scanner (System.in);
        int n = in.nextInt();
        int max = 0;
        ArrayList<Integer> game = new ArrayList<Integer>();

        for(int i = 0; i < n; i++){
            int t = in.nextInt();
            game.add(i, t);
        }

        int counter = 0;

        while(game.size()>0){
            for(int j = 0; j < game.size(); j++){

                if(max <= (int)game.get(j))
                {
                    max=j;
                }
                for(int i = 0; i < game.size(); i++){
                    counter = counter + (int)game.get(max);
                    if(max < game.size() )
                    {
                        game.remove(game.get(max));
                    }
                    if(max+1 <  game.size() )
                    {
                        game.remove(game.get(max+1));
                    }

                    if(max-1 > 0 )
                    {
                        game.remove(game.get(max-1));
                    }

                }
            }

        }
        System.out.print(counter);
        in.close();
    }
}

推荐阅读