簡単な説明ファイル
私は現在、私の最初のUIを持つ大規模な(私のスキルレベルの場合)は、Javaプログラムを書いています。私の目標は、プログラムでUIを使用してキャリア情報をテキストファイルに保存し、そのファイルをJTableに読み込ませることです。これらの2つのアクションはJButtonを通じて実行されます。
ファイルは、変数間の#を使用した形式である:
name#placeOfWork#description#highestSalary#lowestSalary#indexOfDegree#indexOfDegreeLevel and studYears#yearOfMatriculation#
私はキャリアのコンストラクタをインスタンス化しようとしたときに問題が発生した(コード以下)ファイルからに行を分割することにより、必要な部品、私は配列の境界内にあると思われるよう、これは私にArrayIndexOutOfBounds例外を与えているか分からない...
キャリアのパラメータ化コンストラクタ: (キャリア)
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;
}
私にエラーを与えるコード:(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");
}
}
});
ファイル:(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#
エラー:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1
at career.CareerUI$3.actionPerformed(CareerUI.java:200)
更新
だけのコードは以下の通りです、多次元配列にテキストファイルを変換してテストを行なったし、それが働きました。私はこれを理解することに近いかもしれない。
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");
}
}
}
使用したファイル(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
出力:
|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|
が周りの混乱に行くと私はJTableのにそれを変換し、その後に試すことができるかどうかを確認私が最初に間違っていた場所で作業してください。
注:私はarrayindexoutofboundsが何であるか尋ねていません。この特定のコードが私にそれを与える理由を尋ねています。
この例外が発生するテキストファイルの行が決して確認されたことはありませんか?どうして? – Tom
@Tom私のプログラムが変換しようとしている最初の行は、エラー –
を返します。使用した情報で問題が再現できません。 [mcve]を構築してみてください。最初の行で例外が発生した場合は、コードが実際に読み取った内容を印刷します。これはここに示した内容ではありません(テキストファイルの例は問題ありません)。 – Tom