如何解决字母桶
public static ArrayList<ArrayList<String>> hoops(ArrayList<String> a) {
ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(26);
for (char x = 'a'; x <= 'z'; x++) {
list.add(new ArrayList<String>());
}
for (int y = 0; y < a.size(); y++) {
for (char x = 'a'; x <= 'z'; x++) {
if (String.valueOf(x).equals(a.get(y).substring(0,1))) {
list.get(x).add(a.get(y));
}
}
}
return list;
}
此代码旨在“编写并测试一个方法,该方法采用包含字母字符串的 List 单词,根据第一个字母将它们放入 26 个“桶”中,并返回桶的 ArrayList。每个桶应该由一个 ArrayList 表示。第一个存储桶应包含所有以“a”开头的单词的字符串,其顺序与它们在单词中出现的顺序相同;第二个存储桶应包含所有以“b”开头的字符串; 等等。您的方法应该只遍历列表单词一次并保持不变。"
当我运行以下代码时...
public static void main(String[] args) {
ArrayList<String> a = new ArrayList<String>(Arrays.asList("cat","dog","person","beetle","insect"));
ArrayList<Integer> b = new ArrayList<Integer>(Arrays.asList(1,3,2,5,1,3));
System.out.print(hoops(a).get('a'));
}
我收到一条错误消息...
Exception in thread "main" java.lang.indexoutofboundsexception: Index: 99,Size: 26
at java.util.ArrayList.rangeCheck(ArrayList.java:659)
at java.util.ArrayList.get(ArrayList.java:435)
at marcoB.Reverse.hoops(Reverse.java:61)
at marcoB.Reverse.main(Reverse.java:13)
我该如何解决这个问题?谢谢。
解决方法
x 是一个字符。现在您必须问自己异常跟踪中的 Index: 99
来自哪里的问题。通过简单的观察,您会发现字符 'c' 的 ASCII 代码为 99。
此代码
char x = 'c'
list.get(x).add(a.get(y));
相当于
int x = 99
list.get(x).add(a.get(y));
虽然我强烈建议不要使用字符进行索引,因为它会导致代码发臭且不可读,但可以通过以下方式快速解决您的问题:
for (int y = 0; y < a.size(); y++) {
for (char x = 'a'; x <= 'z'; x++) {
if (String.valueOf(x).equals(a.get(y).substring(0,1))) {
int index = x - 'a'; // 'c' - 'a' = 99 - 97 = 3
list.get(index ).add(a.get(y));
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。