簡體   English   中英

Java:嘗試中斷while循環時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM