【发布时间】:2015-02-04 03:45:34
【问题描述】:
对于我的项目,我们必须使用 Java 处理某些 LISP 措辞。给了其中一项任务:
'(A A A A B C C A A D E E E E)
将重复项分组并输出如下:
′((4A)(1B)(2C)(2A)(1D)(4E))
注意前四个 A 与后两个 A 是如何分开的...
我的问题是跟踪每个字母有多少。我将给定的字母添加到数组列表中,并对其进行了一些操作:
for (int i=0;i<list.size();i++)
{
String val=list.get(i);
String first=list.get(0);
while (val.equals(first))
{
total+=1;
val="X";
}
}
Total 应该是第一次出现的次数,但它一直给我 6。6 是序列中所有 A 的正确数字,但我如何让它停在前四个,记录数字然后继续下一个字母?
【问题讨论】:
-
因为您使用的是
==。比较String值,需要使用equals,如val.equals(first)。 -
字母列表是如何提供的?一个字符串?
-
逻辑如下:获取第一个字母并从1开始计数器。检查下一个字母是否相同。如果是,则增加计数器并检查下一个。重复直到找到不同的字母。找到后,打印计数器 + 上一个字母,将计数器重置为 1 并重复下一个字母