我正在製作一個測驗程序,它可以調用兩個.txt文件(一次一個)來獲得問題和答案。這兩個文件有不同數量的問題和答案。它按順序遍歷它們,當你得到最後一個問題的答案後,點擊get question按鈕,它會給出一個索引超出界限的錯誤。我試圖找出在顯示最後一個問題後禁用jbuttonQ的最佳方法。我想我錯過了一個for循環或嘗試捕獲某處。這些問題和答案是分開的ArrayList指數超出了測驗程序的界限
這裏的jbuttonQ行動執行代碼:
statusMessageLabel.setText("");
jtxtA.setText("");
jtxtQ.setText(q.getQuestion());
jtxtCurrQ.setText(String.valueOf(q.getQNumber()));
jbtnA.setEnabled(true);
jbtnA.requestFocusInWindow();
jbtnQ.setEnabled(false);
這裏的jbuttonA行動執行代碼:
statusMessageLabel.setText("");
jtxtA.setText(q.getAnswer());
jbtnQ.setEnabled(true);
jbtnQ.requestFocusInWindow();
jbtnA.setEnabled(false);
這裏的jbtnMenu代碼:
statusMessageLabel.setText("");
jtxtQ.setText("");
jtxtA.setText("");
jtxtCurrQ.setText("");
jtxtTotQ.setText("");
JFileChooser f = new JFileChooser(".");
String path = "";
f.setDialogTitle("Select quiz file.");
FileNameExtensionFilter filter = new FileNameExtensionFilter("Text file (*.txt)","txt");
f.setFileFilter(filter);
JDialog dg = new JDialog();
int rval = f.showOpenDialog(dg);
if(rval == JFileChooser.CANCEL_OPTION){
statusMessageLabel.setText("Open canceled.");
jtxtFile.setText("");
}else{
path = f.getSelectedFile().getAbsolutePath();
jtxtFile.setText(path);
q = new Quiz(path); //instantiation call
if(q.getErrorMsg().isEmpty()){
statusMessageLabel.setText(q.getActionMsg());
jtxtTotQ.setText(String.valueOf(q.getQCount()));
jbtnQ.setEnabled(true);
jbtnQ.requestFocusInWindow();
}else{
statusMessageLabel.setText(q.getErrorMsg());
}
}
}
這裏是Quiz.java類:
public class Quiz {
private String filename;
private String errmsg, actmsg;
private ArrayList<String> questions;
private ArrayList<String> answers;
private int qCount, qNumber;
private boolean quizover;
public Quiz(String path){
this.errmsg = "";
this.actmsg = "";
questions = new ArrayList<>();
answers = new ArrayList<>();
try{
BufferedReader in = new BufferedReader(new FileReader(path));
String s = in.readLine();
while (s != null){
questions.add(s);
answers.add(in.readLine());
qCount++;
s = in.readLine();
}
in.close();
}catch(IOException e){
this.errmsg = "Unable to open file " + path;
}
if (qCount > 0){
this.actmsg = "Quiz file has " + qCount + " questions.";
qNumber = 1;
quizover = false;
}else if(qCount <= 0){
this.actmsg = "No questions in file: " + path;
qNumber = 0;
quizover = true;
}
}//end of constructor
public String getErrorMsg(){
return this.errmsg;
}
public String getActionMsg(){
return this.actmsg;
}
public int getQCount(){
return this.qCount;
}
public int getQNumber(){
return this.qNumber;
}
public String getQuestion(){
if(this.qCount == 0){
this.errmsg = "Question requested from empty quiz.";
return this.errmsg;
}
return this.questions.get(this.qNumber - 1);
}
public String getAnswer(){
if(this.qCount == 0){
this.errmsg = "Answer requested from empty quiz.";
return this.errmsg;
}
String a = this.answers.get(this.qNumber - 1);
qNumber ++;
return a;
}
}
任何幫助,將不勝感激。謝謝。
「這兩個文件有問題和答案不同數量的」這是否意味着問題和答案文件有不同數量的條目,或者文件可以包含任何數字,只要這兩個文件具有相同的數字? – NRitH
...以及哪條線獲取IndexOutOfBoundsException? –
這兩個文件具有不同數量的條目。它沒有說明哪一行,它說「線程中的異常AWT-EventQueue-0索引超出範圍異常:索引6,大小6 – Josh