Java Arraylist异常错误
我是java编程的初学者。我正在尝试开发一个程序,但当我运行下面发布的程序时,它返回了此错误:Java Arraylist异常错误,java,arraylist,Java,Arraylist,我是java编程的初学者。我正在尝试开发一个程序,但当我运行下面发布的程序时,它返回了此错误: Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 at java.util.ArrayList.rangeCheck(ArrayList.java:635) at java.util.ArrayList.get(ArrayList.java:411) at Instruction.inst
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:635)
at java.util.ArrayList.get(ArrayList.java:411)
at Instruction.instructionProcess(Instruction.java:27)
at Instruction.main(Instruction.java:79)
Java Result: 1
这是我的密码:
import java.io.*;
import java.util.*;
public class Instruction {
public static void firstWord(ArrayList<String> optionCode, ArrayList<String> optionCodeList) {
for (int i = 0; i<optionCode.size(); i++) {
if (!optionCodeList.contains(optionCode.get(i))) {
optionCode.set(i,optionCode.get(i).substring(0, optionCode.get(i).indexOf(' ')) + " *****ERROR*****");
}
}
}
public static void instructionProcess(ArrayList<String> optionCode) {
for (int i=0; i<optionCode.size(); i++) {
if (optionCode.get(i).contains("LD")) {
if (optionCode.get(i+1).contains("ADD.D")) {
optionCode.add(i+1, "stall -----------");
}
}
}
for (int i=0; i<optionCode.size(); i++) {
if (optionCode.get(i).contains("ADD.D")) {
if (optionCode.get(i+1).contains("S.D")) {
optionCode.add(i+1, "stall ----------");
optionCode.add(i+2, "stall ----------");
}
}
}
for (int i=0; i<optionCode.size(); i++) {
if (optionCode.get(i).contains("BNEZ")) {
optionCode.add(i+1, "stall ----------");
}
System.out.println(optionCode.get(i));
}
}
public static void printOutput(ArrayList<String> optionCode) {
for (int i=0; i<optionCode.size(); i++) {
System.out.println(optionCode.get(i).substring(0, optionCode.get(i).indexOf(' ')));
}
}
public static void main(String[] args) throws IOException {
ArrayList<String> optionCodeList = new ArrayList<String>();
optionCodeList.add("LD");
optionCodeList.add("SD");
optionCodeList.add("ADD.D");
optionCodeList.add("SUB.D");
optionCodeList.add("MUL.D");
optionCodeList.add("DIV.D");
optionCodeList.add("SUBI");
optionCodeList.add("SUB");
optionCodeList.add("ADDI");
optionCodeList.add("ADD");
optionCodeList.add("BNEZ");
optionCodeList.add("BEZ");
optionCodeList.add("BRA");
Scanner File = new Scanner(new File("in_sample.txt"));
while (File.hasNextLine()) {
String line = File.nextLine();
ArrayList<String> optionCode = new ArrayList<>();
Scanner text = new Scanner(line);
while (text.hasNextLine()) {
optionCode.add(text.nextLine());
}
firstWord(optionCode, optionCodeList);
instructionProcess(optionCode);
printOutput(optionCode);
PrintWriter outFile = new PrintWriter("Output.txt");
for (int i = 0; i < optionCode.size(); i++) {
outFile.println(optionCode.get(i));
}
outFile.close();
}
}
}
import java.io.*;
导入java.util.*;
公共课堂教学{
公共静态无效首字(ArrayList optionCode,ArrayList OptionDelist){
对于(inti=0;iIn
for(inti=0;i通常看这行
for (int i=0; i<optionCode.size(); i++) {
if (optionCode.get(i).contains("LD")) {
if (optionCode.get(i+1).contains("ADD.D")) { // from there you got an exception
optionCode.add(i+1, "stall -----------");
请在您尝试获取某个i+1
的每个循环中替换您的循环
条件,因为它将导致异常。查看嵌套的if
。如果您命中了end元素,并且它满足包含
条件,您将尝试访问超出范围的i+1
元素。java.lang.IndexOutOfBoundsException:Index:1,Size:1
:异常非常明显。您正在尝试访问大小为1
的ArrayList
的位置,因此唯一可用的索引是0
。您甚至有行号,因此您可以确切地看到导致此异常的代码行。此外,您还必须三个以完全相同的方式进行迭代的个体。由于它们似乎都不依赖于前面修改数组的个体,因此这些迭代实际上是冗余的。
for (int i=0; i<optionCode.size(); i++) {
if (optionCode.get(i).contains("LD")) {
if (optionCode.get(i+1).contains("ADD.D")) { // from there you got an exception
optionCode.add(i+1, "stall -----------");
for (int i=0; i<optionCode.size()-1; i++) {
if (optionCode.get(i).contains("LD")) {
if (optionCode.get(i+1).contains("ADD.D")) { //now you have sure that i+1 will return sth not null.
optionCode.add(i+1, "stall -----------");
//now you have sure that i+1 will return sth not null.