LinkedList的IndexOutOfBoundsException

时间:2014-04-09 01:03:30

标签: java swing indexoutofboundsexception

我尝试根据JList中选择的值将文本字段的文本设置为字符串。

  • JList = list
  • LinkedList<WordPair> = wordpair_list
  • WordPair包含wordAwordB

如果有人能向我解释为什么这不起作用,我会永远欠你的债。在这个程序中显然有很多代码,但stackoverflow似乎认为我的文本与代码比率是不成比例的。如果您个人想要其他代码,如果您愿意接受挑战,我很乐意将其发送给您。

public void showTranslation(){
    int i = wordpair_list.indexOf(list.getSelectedValue());
    textField.setText(wordpair_list.get(i).getWordB());
}

public Dictionary(Object o){ 
    if (o instanceof String){ 
        String filename = (String) o; 
        File file = new File(filename); 
        Scanner sc = null; 

        try { 
            sc = new Scanner(file); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace(); 
        } 

        while (sc.hasNextLine()){ 
           words.add(new WordPair(sc.nextLine())); 
        } 
    } 
}

public WordPair(String arg0) { 
    arg0.trim(); 
    int equalsIndex = arg0.indexOf("="); 
    this.wordA = arg0.substring(0, equalsIndex-1); 
    this.wordB = arg0.substring(equalsIndex+1); 
}

4 个答案:

答案 0 :(得分:0)

很难用您提供的代码来判断,但如果wordpar_list只包含2个元素(wordA和wordB),则list.getSelectedValue()的输出只能是0或1.我会尝试打印出来(或者debug)看看list.getSelectedValue()给你的是什么,但它可能不像你期望的那样是0或1。

希望有所帮助!

答案 1 :(得分:0)

您的wordpair_list不包含任何list.getSelectedValue()次返回。请注意,当指定的对象未包含在列表中时,indexOf()方法将返回-1

您可以通过打印/记录i的值来确认。

在修复代码方面,如果wordpair_list实际 包含list.getSelectedValue(),则您的代码可以更简洁地写为:

public void showTranslation(){
    textField.setText(list.getSelectedValue().getWordB());
}

但由于该值不在列表中,因此您必须尝试其他方法。一种可能性是您混淆了类型,并在wordpair_list中查找不兼容类型的对象。另一种可能性是您需要覆盖equals()(因此也是hashCode()),以便indexOf()查找成功。

有关最后一位的更多信息:What issues should be considered when overriding equals and hashCode in Java?

答案 2 :(得分:0)

这是一个可以使用调试器的好例子。或者插入一堆System.out.println()来打印出一些本地值。

答案 3 :(得分:0)

首先需要调试此代码,打印出从indexOf()返回的内容 第二,你可能不应该使用LinkedList而是使用ArrayList来获得最佳实践。

另外,你可能需要将wordpair_list.get(i)投射到WordPair或其他任何对象。