[英]Java - Error with a While loop not exiting when if condition hits break:
[英]Java: error when trying to break while loop
當程序應該達到中斷時,我不斷收到此錯誤:
“線程“main”中的異常 java.lang.IndexOutOfBoundsException:索引:2,大小:2 在 java.util.LinkedList.checkElementIndex(LinkedList.java:555) 在 java.util.LinkedList.get(LinkedList.java:476)在 Glosor.main(Glosor.java:65)"
這是代碼:
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.io.*;
public class Glosor {
public static void main(String[] args) throws IOException {
List<String> gloslista1 = new LinkedList<String>(Arrays.asList());
List<String> gloslista2 = new LinkedList<String>(Arrays.asList());
String inputStr1 = JOptionPane.showInputDialog(null,
"**********************************" + "\n\n" +
"1. Skapa glosövning" + "\n\n" +
"2. Starta glosövning" + "\n\n" +
"3. Avsluta" + "\n\n" +
"**********************************");
int input1 = Integer.parseInt(inputStr1);
switch (input1) {
case 1:
String övningsnamn = JOptionPane.showInputDialog(null, "Vad heter övningen?");
String språk1 = JOptionPane.showInputDialog(null, "Språk 1?");
String språk2 = JOptionPane.showInputDialog(null, "Språk 2?");
while (true) {
String glosa1 = JOptionPane.showInputDialog(null, "Skriv in glosa på " + språk1 + "\n\n" +
"När du är klar skriv klar i rutan");
if(glosa1.equals("klar")) {
break;
//this is where i get the error message
}
else {
String glosa2 = JOptionPane.showInputDialog(null, "Skriv in glosa på " + språk2);
gloslista1.add(glosa1);
gloslista2.add(glosa2);
}
}
String filnamn1 = "svenskaord";
String filnamn2 = "franskaord";
PrintWriter utström1 = new PrintWriter
(new BufferedWriter
(new FileWriter(filnamn1)));
//Skapar en text fil för glosorna på svenska
PrintWriter utström2 = new PrintWriter
(new BufferedWriter
(new FileWriter(filnamn2)));
//Skapar en text fil för glosorna på franska
for(int i = 0; i<=gloslista1.size(); i++) {
utström1.println(gloslista1.get(i));
utström2.println(gloslista2.get(i));
//Skriver in glosor i text filerna
}
循環應該是
for(int i = 0; i<=gloslista1.size()-1; i++)
意味着它應該以gloslista1.size()-1
結束。 gloslista1.size()-1
說你在列表中有 2 個元素,所以你在列表中有 2 個索引,即0 and 1
但你試圖訪問索引2
,它不存在於列表給你例外。
這個 for 循環越界了。
for(int i = 0; i<=gloslista1.size(); i++) {
utström1.println(gloslista1.get(i));
utström2.println(gloslista2.get(i));
//Skriver in glosor i text filerna
}
這樣做gloslista1.get(i)
當i
等於gloslista1.size()
是出界,因為列表索引從0到gloslista1.size()-1
。 for 循環需要像 singhakash 建議的那樣,或者更像這樣:
for(int i = 0; i<gloslista1.size(); i++)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.