У меня проблемы с программой java, которую я пишу. Он предназначен для анализа текстового файла с разделителями табуляции, а затем хранения в списке массивов. Я пытаюсь изменить формат текстового файла с разделителями табуляции с помощью java-программы. Однако мой код получает нечетную ошибку времени выполнения. Вот мой кодЗагадочная ошибка Runtime в Java
import java.io.*;
import java.util.*;
public class Parse
{
public static void main(String[] args) {
try{
Scanner scanner = new Scanner(new File("C:\\Users\\Nelson Liu\\My Documents\\ParsePlanets\\SearchResults.txt"));
ArrayList <String> list = new ArrayList <String>();
scanner.useDelimiter("\t");
while (scanner.hasNext()) {
list.add(scanner.next());
}
scanner.close();
String currenttarget = "Mercury";
String currentfeaturetype = "Albedo Feature";
String featuretypebeforecomma = "albedo";
PrintWriter writer = new PrintWriter("jpl-" + currenttarget + "-" + featuretypebeforecomma + ".txt", "UTF-8");
String classname = "jpl-" + currenttarget + "-" + featuretypebeforecomma;
int multiplier = 0;
int j = 0;
int testingtarget = 0;
int testingfeature = 0;
while (multiplier < 15145) {
testingtarget = (j+2) + (10*multiplier);
testingfeature = (j + 6) +(10*multiplier);
if((list.get(testingtarget) == currenttarget) && (list.get(testingfeature) == currentfeaturetype)){
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("CODE");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-2));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("TARGET");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("DIAMETER");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)+1));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("LATITUDE-LONGITUDE");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)+5));
writer.print(list.get((j+2) + (10*multiplier)+5) + "," + list.get((j+2) + (10*multiplier)+6));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("FEATURE-TYPE");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)+4));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("APPROVAL-STATUS");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)+5));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("APPROVAL-DATE");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)+6));
writer.print("\t");
writer.print("\n");
writer.print(classname);
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)-1));
writer.print("\t");
writer.print("ORIGIN");
writer.print("\t");
writer.print(list.get((j+2) + (10*multiplier)+7));
writer.print("\t");
writer.print("\n");
}
multiplier = multiplier +1 ;
}
} catch(Exception e){
System.out.println("error");
}
}
}
Я незакомментированная линия 1 на 1, а программа работает нормально, если на линию множителя = множитель +1; есть
еще один, я попытался использовать отладчик в своей среде IDE, только чтобы основной класс отображался пустым.
Трассировка стека (скопировано с комментариями):
java.lang.IndexOutOfBoundsException: Index: 432, Size: 427 at
java.util.ArrayList.rangeCheck(ArrayList.java:604) at
java.util.ArrayList.get(ArrayList.java:382) at Parse.main(Parse.java:28) at
__SHELL4.run(__SHELL4.java:6) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at
java.lang.reflect.Method.invoke(Method.java:606) at
bluej.runtime.ExecServer$3.run(ExecServer.java:725)
Заранее спасибо за помощь, я действительно застрял.
Покажите нам ошибку, вы получаете –
вот что пни меня. не отображается ошибка; программа просто заканчивается. Я использовал блок catch, чтобы попытаться отладить, и программа выведет только «ошибку», когда множитель = множитель + 1 строка по какой-то причине не была изменена edit: может это просто логическая ошибка? –
Скорее всего, вы выходите за пределы на 'list.get()', пытаясь получить доступ к индексу, которого там нет. – iamnotmaynard