2015-08-26 97 views
0

有人能告诉我为什么我不断得到IndexOutOfBoundsExceptionIndexOutOfBounds错误插入排序列表

Cheeses只是一个包含一组字符串的数组。 Alphabets是一个包含单个字符串变量的类。

我正在尝试编写一个程序,其中字符串前面有起始字母表。

所以会出现一个A后面跟着以A开头的单词等等。

public class RecyclerTest { 

    public static void main(String[] args) { 
     RecyclerTest obj = new RecyclerTest(); 
     ArrayList<Object> arr_obj = obj.getRandomSublist(Cheeses.sCheeseStrings, 20); 
     // System.out.println(arr_obj.toString()+""); 

    } 

    ArrayList<Object> getRandomSublist(String[] array, int amount) { 
     final ArrayList<String> list = new ArrayList<>(amount); 
     Random random = new Random(); 
     while (list.size() < amount) { 
      list.add(array[random.nextInt(array.length)]); 
     } 
     Collections.sort(list, new sortList()); 
     return insert(list); 
    } 

    class sortList implements Comparator<String> { 

     @Override 
     public int compare(String s, String t1) { 
      return s.compareTo(t1); 
     } 
    } 

    ArrayList<Object> insert(ArrayList<String> arrayList) { 
     ArrayList<Object> str = new ArrayList<>(); 
     int count = arrayList.size(); 
     System.out.println(arrayList.toString()); 
     int i = 0; 
     while (i < count) { 
      // Alphabets alphabets = new Alphabets(arrayList.get(i).substring(0,1)); 
      String temp = arrayList.get(i).substring(0, 1); 
      str.add(temp); 
      System.out.println(str.toString()); 
      System.out.println(i); 
      while ((i < count) && (temp.equalsIgnoreCase(arrayList.get(i).substring(0, 1)))) { 
       str.add(arrayList.get(i)); 
       i++; 
      } 
     } 
     str.add(arrayList.get(i)); 
     // System.out.println(str.size()); 
     return str; 
    } 

} 



public class Alphabets { 
    String alp; 

    public Alphabets(String alp) { 
     this.alp = alp; 
    } 

    public String getAlp() { 
     return alp; 
    } 
} 

原始字符串

【宝贝瑞士,布雷斯布鲁,布鲁德罗勒,夏洛莱,利木 夏洛莱,利木心德CHEVRE,冰袋,Fourme德蒙布里松,新鲜 芝士,鲜奶酪,哈瓦蒂干酪,乐Fium ORBO,Loddiswell埃文代尔, 皮克斯基尔金字塔,Remedou,芝士萨拉塔,萨姆索岛,太特省德莫因,特鲁 杜酒庄,Tymsboro]

Output 

[B] 
    0 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C] 
    3 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F] 
    7 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F, Fourme de Montbrison, Fresh Mozzarella, Fromage Frais, H] 
    10 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F, Fourme de Montbrison, Fresh Mozzarella, Fromage Frais, H, Havarti, L] 
    11 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F, Fourme de Montbrison, Fresh Mozzarella, Fromage Frais, H, Havarti, L, Le Fium Orbo, Loddiswell Avondale, P] 
    13 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F, Fourme de Montbrison, Fresh Mozzarella, Fromage Frais, H, Havarti, L, Le Fium Orbo, Loddiswell Avondale, P, Peekskill Pyramid, R] 
    14 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F, Fourme de Montbrison, Fresh Mozzarella, Fromage Frais, H, Havarti, L, Le Fium Orbo, Loddiswell Avondale, P, Peekskill Pyramid, R, Remedou, Ricotta Salata, S] 
    16 
    [B, Baby Swiss, Bresse Bleu, Bruder Basil, C, Charolais, Charolais, Coeur de Chevre, Cold Pack, F, Fourme de Montbrison, Fresh Mozzarella, Fromage Frais, H, Havarti, L, Le Fium Orbo, Loddiswell Avondale, P, Peekskill Pyramid, R, Remedou, Ricotta Salata, S, Samso, T] 
    17 

回答

0
import java.util.ArrayList; 

import java.util.Collections; 
import java.util.Comparator; 
import java.util.Random; 

public class RecyclerTest { 

    public static void main(String[] args) { 
     RecyclerTest obj = new RecyclerTest(); 
     ArrayList<Object> arr_obj = obj.getRandomSublist(Cheeses.sCheeseStrings, 20); 
     // System.out.println(arr_obj.toString()+""); 

    } 

    ArrayList<Object> getRandomSublist(String[] array, int amount) { 
     final ArrayList<String> list = new ArrayList<>(amount); 
     Random random = new Random(); 
     while (list.size() < amount) { 
      list.add(array[random.nextInt(array.length)]); 
     } 
     Collections.sort(list, new sortList()); 
     return insert(list); 
    } 

    class sortList implements Comparator<String> { 

     @Override 
     public int compare(String s, String t1) { 
      return s.compareTo(t1); 
     } 
    } 

    ArrayList<Object> insert(ArrayList<String> arrayList) { 
     ArrayList<Object> str = new ArrayList<>(); 
     ArrayList<Object> cc = new ArrayList<>(); 
     int count = arrayList.size(); 
      System.out.println(arrayList.toString()); 

     int i = 0; 

    String prv = ""; 
    int letterscount=0; 
     System.out.println(str.size()); 
     while (i < count) { 
       //System.out.println(str.size()); 
      // Alphabets alphabets = new Alphabets(arrayList.get(i).substring(0,1)); 
      String temp = arrayList.get(i).substring(0, 1); 

      if(!prv.equals(temp)) 
      { 

       str.add(temp); 

       int x = 0 ; 

       while (temp.equalsIgnoreCase(arrayList.get(x).substring(0, 1))) { 

        if(!prv.equalsIgnoreCase(temp)){ 
         str.add(arrayList.get(x)); 
        } 

        x++; 

       } 

       letterscount++; 
      } 

      if(!prv.equalsIgnoreCase(temp)){ 

        int size = str.size()-letterscount; 

        System.out.println(str.toString()); 
        str.add(arrayList.get(i)); 
        System.out.println(size); 

      } 
      prv = temp; 

      i++; 
     } 

     return str; 
    } 

} 


    class Cheeses { 
     static String[] sCheeseStrings = {"Baby Swiss", "Bresse Bleu", "Bruder Basil", 
       "Charolais", "Charolais", "Coeur de Chevre", "Cold Pack", "Fourme de Montbrison", 
       "Fresh Mozzarella", "Fromage Frais", "Havarti", "Le Fium Orbo", "Loddiswell Avondale", 
       "Peekskill Pyramid", "Remedou", "Ricotta Salata", "Samso", "Tete de Moine", "Trou du Cru", 
       "Tymsboro"}; 

     public Cheeses() { 

     } 
} 

    class Alphabets { 
    String alp; 

    public Alphabets(String alp) { 
     this.alp = alp; 
    } 

    public String getAlp() { 
     return alp; 
    } 
} 
+0

关于如何解决这个问题的任何建议? –

+0

仍然是相同的错误,它看起来像在end while循环完成i == count的值时的结尾。 –

+1

在这个str.add(arrayList.get(i))中的错误;你试图在循环后传递我 – A7med

1

看这个循环:

while ((alphabets.getAlp().equalsIgnoreCase(arrayList.get(i).substring(0, 1))) && (i < count)) { 
    str.add(arrayList.get(i)); 
    i++; 
} 

注意你怎么称呼arrayList.get(i)之前检查i < count ...因此,如果i == count,它将炸毁该行上。你可能只是能够扭转这些条件:

while (i < count && alphabets.getAlp().equalsIgnoreCase(arrayList.get(i).substring(0, 1)) 

(我没试过跟随你在做什么的具体细节 - 只是解决眼前的问题)

+0

这didnt工作,我会期望新的ArrayList str的大小比arrayList大,但由于某种原因,它总是低于70, –

+0

线程“主”java.lang.IndexOutOfBoundsException异常:索引:70,大小:70我保持得到这个错误 –

+0

@JudeFernandes:它没有帮助你没有通过堆栈跟踪显示问题出在哪里。你是否尝试过通过代码进行调试以确定问题出在哪里? (我指出的问题至少有一个*问题,但当然可能有其他问题......) –