我必须为一个类编写一段代码,该类计算输入文件中字符的出现,然后对其进行排序,然后选择通过创建一个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内的数组元素
答案 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
现在您可以对结果进行排序了。