2017-05-12 77 views
0

鉴于Java代码:的list_from打印多个值的Java

private List<String> list_from = new ArrayList<String>(); 
private List<String> list_dest = new ArrayList<String>(); 

值是:中list_dest

[v5, v3, v5, v1, v1, v6, v6, v3, v4, v5, v4, v6] 

值是:

[v3, v5, v1, v5, v6, v1, v3, v6, v5, v4, v6, v4] 

我使用的是循环用if语句打印list_from中的值:

for(int i=0;i < list_from.size();i++){      
    if(list_dest.get(i+1) == list_from.get(i)){ 
     System.out.println(list_from.get(i)); 
    } 
} 

它给出了一个正确的结果,但在if语句中出现未知错误。

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 18, Size: 18 

非常感谢您的帮助!

+0

你能提供这个错误的内容? –

+5

*在if语句时出现未知错误*它从来都不是一个未知错误...发布堆栈跟踪 – Frakcool

+0

'i'将一直持续到'list_from.size()',所以'list_dest.get(i + 1)'看起来像可疑。例如,如果两个列表具有相同的大小,那么您将得到一个超出范围的索引 – janos

回答

3

比较字符串应该由string.equals(string2)完成。
字符串是对象。比较对象时,应始终使用equals。 此外,您正在比较数组中的索引太多。

你的代码应该看起来像:

for(int i=0;i < list_from.size()-1;i++){      
    if(list_dest.get(i).equals(list_from.get(i+1))){ 
     System.out.println(list_from.get(i)); 
    } 
} 
3

list_dest.get(i + 1),这是问题所在。 在上一次迭代中,i的值是可能的最大索引。当你给它加1时,它会给arrayOutOfBoundsException。

还更好使用string.equals()方法来比较字符串。

2

多个问题。首先,将环路条件更改为<list_from.size()-1

其次,将字符串与.equals()比较,而不是==

代码变得

for(int i=0;i < list_from.size()-1;i++){      
    if(list_dest.get(i+1).equals(list_from.get(i))){ 
     System.out.println(list_from.get(i)); 
    } 
} 
+0

我明白了。非常感谢!因为代码有很多我必须处理的东西。没有提到它。现在工作:) – Ender