我想比较同一个列表中的元素。如果元素不等于增量计数器,如果它们相等,则计数器保持不变。我有一些问题,让这个正确。 我的列表看起来像这样(这些只是用于测试的值):
List<Double> sample = new ArrayList<Double>();
sample.add(110.00);
sample.add(90.00);
sample.add(90.00);
sample.add(20.00);
sample.add(20.00);
我需要得到结果
[1, 2, 2, 3, 3].
这是我到目前为止所做的,我尝试了两种不同的方法。
Double count = 1.0;
for(int i = 0; i < sample.size()-1; i++)
{
Double first = sample.get(i);
Double second = sample.get(i+1);
if(first.equals(second))
{
sample.set(i, count);
}
else
{
sample.set(i, count++);
}
}
打印:
[1.0, 2.0, 2.0, 3.0, 20.0]
我不确定如何比较最后一双。我知道我没有检查列表的大小,因为我有size() - 1但我会得到索引超出范围的异常。 第二种方法是:
for (int i = 0; i < sample.size()-1; i++)
{
for(int j=i+1; j < sample.size(); j++)
{
if(sample.get(i)==sample.get(j))
{
sample.set(i, count);
}
else
{
sample.set(i, count++);
}
}
}
这将打印:
[6.0, 8.0, 10.0, 11.0, 20.0]
我知道我循环了两次,但可以找出调整的位置。
答案 0 :(得分:0)
每个count
需要一个Double
。
使用Map
:
Map<Double, Integer> doubleCount = new HashMap<>();
for (double d : sample) {
Integer count = doubleCount.get(d);
if(count == null) {
doubleCount.put(d, 1);
} else {
doubleCount.put(d, count + 1);
}
}
// to array
int[] res = new int[sample.size()];
int i = 0;
for(int d : sample) {
res[i++] = doubleCount.get(d);
}
答案 1 :(得分:0)
Double count = 1.0;
for(int i = 0; i < sample.size()-1; i++)
{
Double first = sample.get(i);
Double second = sample.get(i+1);
if(first.equals(second))
{
sample.set(i, count);
if((i + 2) == sample.size())
{
sample.set((i+1), count);
}
}
else
{
sample.set(i, ++count);
if((i + 2) == sample.size())
{
sample.set((i+1), count);
}
}
}
试试这个。
答案 2 :(得分:0)
在你的第一个例子中,你必须处理最后两个元素 - 试试这个:
Double count = 1.0;
for(int i = 0; i < sample.size()-1; i++) {
Double first = sample.get(i);
Double second = sample.get(i+1);
if(first.equals(second)) {
sample.set(i, count++);
if(i==(sample.size()-2)) {
sample.set(i, count);
sample.set((i+1), count);
} else {
sample.set(i, count);
}
} else {
sample.set(i, count);
if(i==(sample.size()-2))
sample.set((i+1), count);
else
sample.set(i, count);
}
}