字母桶

如何解决字母桶

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?