Java:尝试中断while循环时出错

时间:2015-09-16 17:38:48

标签: java

当程序应该达到中断时,我不断收到此错误:

"线程中的异常" main" java.lang.IndexOutOfBoundsException:索引:2,大小:2     at 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

                 }

2 个答案:

答案 0 :(得分:0)

循环应该是

for(int i = 0; i<=gloslista1.size()-1; i++) 

表示它应该以{{1​​}}结尾。堆栈跟踪表示列表中有2个元素,因此列表中有2个索引,即gloslista1.size()-1,但您尝试访问索引{{1}在列表中不存在的例外情况。

答案 1 :(得分:0)

这个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()执行gloslista1.size()-1超出界限,因为列表索引从0变为for(int i = 0; i<gloslista1.size(); i++) 。 for循环需要像singhakash建议的那样,或更像惯用语:

app.controller('MainController', ['$scope','places', function($scope,places)     {
  $scope.mapCenter = {
  lat: 40.741934,
  lng: -74.004897,
  zoom: 17
  };
  var geodata=new Array();
  places.success(function(data) {
     geodata = data;
      console.log('inside'+geodata); //You can receive here data
   });
    // console.log(geodata); Because places.success is asycnronous, its the empty array not null
   }]);