我正在做一个项目,我需要从
ArrayList
中系统地删除字母,因为它们出现在用户输入的单词中。然后显示所有剩余的字符,然后继续消除过程,直到只剩下元音.
我似乎无法在程序不崩溃的情况下消除字符。
这是有问题的代码:
public static void Mapper(){
Scanner make = new Scanner(System.in);
char Aphabets[] ={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
ArrayList<Character> Alpabets = new ArrayList<>();
String word = make.nextLine();
for (int i = 0; i < Aphabets.length; i++) {
Alpabets. add(i,Aphabets[i]);
}
for (int i = 0; i < word.length(); i++) {
Alpabets.remove(word.charAt(i));
}
System.out.println(Alpabets);
}
改变
Alpabets.remove(word.charAt(i));
到
Alpabets.remove((Object) word.charAt(i));
问题是
List.remove
有两个实现(它是一个重载方法):
List.remove(int index)
(“从列表中删除第 5 个元素”)
List.remove(Object o)
(“从列表中删除数字 5)。
通过使用
Alpabets.remove(word.charAt(i));
调用,您会意外地调用需要索引的那个,如果您给它一个“足够大”的字符(字符在 Java 中可以被视为数值),您将在以下位置找到索引:删除方法中的界限。
通过将参数强制转换为
Object
,可以强制调用正确的方法。
也许您还可以使用映射键和值并根据用户输入删除。