修改ArrayList内部数组中的单个元素

时间:2019-05-06 18:49:58

标签: java arrays arraylist

我必须为一个类编写一段代码,该类计算输入文件中字符的出现,然后对其进行排序,然后选择通过创建一个ArrayList来做到这一点,其中每个object []具有两个元素,字符和出现次数。

我试图增加代表出现次数的整数,但我无法使它起作用

我当前的尝试如下:

  for(int i=0;i<=text.length();i++) {
        if(freqlist.contains(text.charAt(i))) {
            freqlist.indexOf(text.charAt(i))[1]=freqlist.get(freqlist.indexOf(text.charAt(i)))[1]+1;
        }

    }

文本只是包含所有输入文件的字符串

freqlist之前声明为

List<Object[]> freqlist=new ArrayList<Object[]>();

所以,我想知道如何增加或修改arraylist内的数组元素

3 个答案:

答案 0 :(得分:0)

通常,您的程序中存在3个错误,阻止其运行。它不能工作,因为for循环具有i<=text.length(),并且应该为i < text.length(),否则您将遇到异常。第二个错误是您使用freqlist.contains(...)假定对象数组的两个元素相同,换句话说,数组相等,这是错误的假设。第三个错误是使用freqlist.indexOf(...),它再次依赖于数组相等性。尽管此数据结构List<Object[]>对于任务而言效率不高,但我仍使示例工作。最好使用Map<Character,Integer>。 在这里:

import java.util.ArrayList;
import java.util.List;

class Scratch {
    public static void main(String[] args) {
        String text = "abcdacd";

        List<Object[]> freqlist= new ArrayList<>();

        for(int i=0;i < text.length();i++) {
            Object [] objects = find(freqlist, text.charAt(i));
            if(objects != null) {
                objects[1] = (Integer)objects[1] +1;
            } else {
                freqlist.add(new Object[]{text.charAt(i), 1});
            }

        }

        for (Object[] objects : freqlist) {
            System.out.println(String.format(" %s  =>  %d", objects[0], objects[1]));
        }
    }

    private static Object[] find(List<Object[]> freqlist, Character charAt) {
        for (Object[] objects : freqlist) {
            if (charAt.equals(objects[0])) {
                return objects;
            }
        }
        return null;
    }
}

答案 1 :(得分:0)

我要这样做的方法是首先解析文件并将其转换为字符数组。然后将其发送到charCounter()方法,该方法将计算文件中字母出现的次数。

/**
     * Calculate the number of times a character is present in a character array
     *
     * @param myChars An array of characters from an input file, this should be parsed and formatted properly
     *                before sending to method
     * @return A hashmap of all characters with their number of occurrences; if a
     *                letter is not in myChars it is not added to the HashMap
     */
    public HashMap<Character, Integer> charCounter(char[] myChars) {
        HashMap<Character, Integer> myCharCount = new HashMap<>();
        if (myChars.length == 0) System.exit(1);
        for (char c : myChars) {
            if (myCharCount.containsKey(c)) {
                //get the current number for the letter
                int currentNum = myCharCount.get(c);

                //Place the new number plus one to the HashMap
                myCharCount.put(c, (currentNum + 1));
            } else {
                //Place the character in the HashMap with 1 occurrence
                myCharCount.put(c, 1);
            }
        }
        return myCharCount;
    }

答案 2 :(得分:0)

如果您使用Java 8进行分组,则可以使用一些Stream魔术:

myMap

现在您可以对结果进行排序了。