英文:
Why am i getting IndexOutOfBoundsException here?
问题
import java.util.*;
class two_strings_anagrams1 {
public static boolean compute(String inp1, String inp2) {
ArrayList<Character> hs = new ArrayList<Character>();
for (int i = 0; i < inp1.length(); i++) {
hs.add(inp1.charAt(i));
}
System.out.println(hs);
for (int j = 0; j < inp2.length(); j++) {
hs.remove((Character) inp2.charAt(j));
}
System.out.println(hs);
if (hs.size() == 0) {
return true;
}
return false;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String inp = s.nextLine();
String inp2 = s.nextLine();
System.out.println(compute(inp, inp2));
}
}
当我使用ArrayList或者LinkedList时,我得到了一个IndexOutOfBounds异常,但当我使用HashSet时,代码可以正常工作。异常的原因是什么,如何解决这个异常?
英文:
import java.util.*;
class two_strings_annagrams1 {
public static boolean compute(String inp1, String inp2) {
ArrayList<Character> hs = new ArrayList<Character>();
for (int i = 0; i < inp1.length(); i++) {
hs.add(inp1.charAt(i));
}
System.out.println(hs);
for (int j = 0; j < inp2.length(); j++) {
hs.remove(inp2.charAt(j));
}
System.out.println(hs);
if (hs.size() == 0) {
return true;
}
return false;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String inp = s.nextLine();
String inp2 = s.nextLine();
System.out.println(compute(inp, inp2));
}
}
When I use ArrayList or LinkedList I'm getting an IndexOutOfBounds Exception but when I use HashSet the code is working fine. What's the reason of exception and how the exception can be resolved?
答案1
得分: 0
我认为 hs.remove(inp2.charAt(j))
的解析为 remove(int)
,而不是 remove(Character)
,因为编译器更倾向于将 char
扩展为 int
,而不是将其装箱为 Character
。
如果您使用
hs.remove((Character) inp2.charAt(j))
这将消除歧义。
英文:
I think hs.remove(inp2.charAt(j))
resolves to remove(int)
, not remove(Character)
, because the compiler prefers expanding a char
to an int
over boxing it to a Character
.
If you use
hs.remove((Character) inp2.charAt(j))
it will eliminate the ambiguity.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论