KurzbeschreibungDatei auf Array JTable (Index aus Bounds)
Ich bin derzeit ein massives (Für mein Skill-Level) Java-Programm mit meinem ersten UI zu schreiben. Mein Ziel ist es, dass das Programm die Benutzeroberfläche verwendet, um Karriereinformationen in einer Textdatei zu speichern und es zu ermöglichen, diese Datei in eine JTable zu lesen. Diese beiden Aktionen werden über JButtons ausgeführt.
Die Datei verwendet ein # zwischen Variablen und ist im Format:
name#placeOfWork#description#highestSalary#lowestSalary#indexOfDegree#indexOfDegreeLevel and studYears#yearOfMatriculation#
Das Problem entstand, als ich versuchte, eine Karriere Konstruktor (Code unten) aus der Datei zu instanziiert durch die Linie in die Aufspaltung notwendigen Teile, ich habe keine Ahnung, wie das mir eine ArrayIndexOutOfBounds Ausnahme geben, wie es innerhalb des Arrays Grenzen zu sein scheint ...
Die parametrisierte Konstruktor Karriere: (Karriere)
public final int[] ARR_STUDY_YEARS = { 0, 0, 1, 2, 4, 6, 10 };
public final String ARR_DEGREE[] = { "None", "Commerce", "Science", "Arts", "Computer Sciences", "Education",
"Medicine", "Engineering" },
ARR_DEGREE_LEVEL[] = { "None", "Matriculent", "Undergraduate", "Associate", "Bachelor", "Masters",
"Doctorate" };
// Variables
private String name, setting, description, degree, degreeLevel, qualification;;
private int highestSalary, lowestSalary, avgSalary, sYears, matricYear;
public Career(String name, String setting, String description, int highestSalary, int lowestSalary,
int degreeNo, int degreeLevelNo, int matricYear){
this.name = name;
this.setting = setting;
this.description = description;
this.highestSalary = highestSalary;
this.lowestSalary = lowestSalary;
sYears = ARR_STUDY_YEARS[degreeLevelNo];
degreeLevel = ARR_DEGREE_LEVEL[degreeLevelNo];
degree = ARR_DEGREE[degreeNo];
this.matricYear = matricYear;
}
Der Kodex mir einen Fehler geben: (CareerUI)
JButton btnDisplay = new JButton("Display");
btnDisplay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ArrayList<Career> careerList = new ArrayList<Career>();
File file = new File("Careers.txt");
try {
Scanner reader = new Scanner(file);
while (reader.hasNextLine()) {
String[] line = reader.nextLine().split("#");
Career career = new Career(line[0], line[1], line[2], Integer.parseInt(line[3]), Integer.parseInt(line[4]),
Integer.parseInt(line[5]), Integer.parseInt(line[6]), Integer.parseInt(line[7]));
//^ This constructor is on line 200
careerList.add(career);
}
reader.close();
String[][] cMatrix = new String[careerList.size()][6];
String[] header = { "Name", "Setting", "Description", "Average Salary", "Tertiary Qual. Required",
"Qualification" };
for (int i = 0; i < cMatrix.length; i++) {
for (int j = 0; j < cMatrix[i].length; j++) {
Career c = careerList.get(j);
cMatrix[i] = c.toTableSummary();
}
}
JTable table = new JTable(cMatrix, header);
// table.set
table.setBounds(519, 53, 489, 437);
panel.add(table);
} catch (FileNotFoundException ex) {
System.out.println("There was an error while reading your file");
}
}
});
Die Datei: (Careers.txt)
Chartered Accountant#Office#Balances finances#100000#80000#1#4#2017#
Plumber#House Calls#Fixes Plumbing#50000#10000#0#0#2019#
Doctor#Clinic#Treats illness#150000#50000#6#6#2016#
Architect#Construction Firm#Designs Buildings#80000#50000#6#5#2018#
Der Fehler:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
at career.CareerUI$3.actionPerformed(CareerUI.java:200)
aktualisieren
nur ein Test war mit einer Textdatei in einem multidimensionalen Array konvertieren und es hat funktioniert, ist der Code unten. Vielleicht bin ich kurz davor, das herauszufinden.
public class ScanToArray {
public static void main(String[] args) {
try {
Scanner scFile = new Scanner(new File("test.txt"));
int x = 0;
String[][] multi = new String[5][5];
while (scFile.hasNextLine()){
String[] next = scFile.nextLine().split("#");
multi[x][0] = next[0];
multi[x][1] = next[1];
multi[x][2] = next[2];
multi[x][3] = next[3];
multi[x][4] = next[4];
x++;
}
scFile.close();
int ln = 0;
for (int i = 0; i < multi.length; i++) {
for (int j = 0; j < multi[i].length; j++) {
if(i>ln){
System.out.println();
ln = i;
}
System.out.print("|" +multi[i][j] +"|");
}
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "Error: File not found");
}
}
}
Die Datei verwendet (test.txt)
0.0#0.1#0.2#0.3#0.4
1.0#1.1#1.2#1.3#1.4
2.0#2.1#2.2#2.3#2.4
3.0#3.1#3.2#3.3#3.4
4.0#4.1#4.2#4.4#4.4
Der Ausgang:
|0.0||0.1||0.2||0.3||0.4|
|1.0||1.1||1.2||1.3||1.4|
|2.0||2.1||2.2||2.3||2.4|
|3.0||3.1||3.2||3.3||3.4|
|4.0||4.1||4.2||4.4||4.4|
um zu verwirren und sehen, ob ich das in einem JTable und dann versuchen, konvertieren herauszufinden, wo ich anfangs falsch gelaufen bin.
Hinweis: Ich frage nicht, was ein Arrayindexoutofbounds ist, frage ich, warum dieser bestimmte Code gibt mir es.
Sie haben also nie überprüft, welche Zeile Ihrer Textdatei diese Ausnahme verursacht? Warum? – Tom
@Tom Die erste Zeile, die mein Programm zu konvertieren versucht gibt den Fehler –
Dann ist Ihr Problem nicht reproduzierbar mit den Informationen, die Sie verwendet haben. Versuche ein [mcve] zu erstellen. Und wenn die erste Zeile die Ausnahme verursacht, dann drucken Sie, was Ihr Code tatsächlich liest, da dies nicht das ist, was Sie uns hier gezeigt haben (Ihr Textdateibeispiel ist in Ordnung). – Tom