假设我有一个包含以下值的向量
id = 100
latitude = 2 .33
longitude = 4.55
id = 200
latitude = 1.00
longitude = 3.00
id = 300
latitude = 2.33
longitude = 4.55
我有以下变量
int item = 10;
double x = 2.33;
double y = 4.55
1。)现在,我想将2个变量(x,y)的值与向量中的(纬度,经度)值进行比较。
2。)如果(x,y)值等于(纬度,经度),那么我将项目变量的值添加到矢量
我实现它的逻辑如下
Vector al;
int size = al.size() //need to adjust the size as and when i add/remove items from al
for(int i=0;i<sz-1;i++)
{
if(al.get(i).getClass().equals(Double.TYPE)) //Need to ignore id in Vector
if(a.get(i)==x & a.get(i+1)==y)
{
//add the sensor id at i-2 and adjust the size of vector
}
else {
//remove the items 200,1.00,3.00
// adjust the size of vector
}
但上面的代码并没有给我预期的结果。任何人都可以为我提供工作代码以获得最终输出如下
10,100,2.33,4.55
10,300,2.33,4.55
请注意,预期的o / p中不存在内容200,1.00,3.00,'(x,y)的coz值与(纬度,经度)不匹配
提前致谢。
答案 0 :(得分:4)
请勿将==
与Double
个对象一起使用。您将它们比作相同的实例,而不是具有相同的值。
对于双打,最好将差异比较低于某个阈值,因为可能存在不同的舍入伪像。
答案 1 :(得分:3)
我认为使用按位AND是一个错误:
if(a.get(i)==x & a.get(i+1)==y)
使用布尔AND:
if(a.get(i)==x && a.get(i+1)==y)
请参阅Anony-Mousse与使用==
对象相关的答案。
答案 2 :(得分:0)
由于你知道向量在位置0,3,...,(0 mod 3)存储id,你应该在i = 1处开始你的循环并且每次增加3:
for(int i=1;i<sz;i+=3)
然后您不必检查该项目是否为双
答案 3 :(得分:0)
使用集合时,我会说:使用Apache集合 - 它们有一个非常有用的CollectionUtils实用程序对象:
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html
答案 4 :(得分:0)
这是解决上述问题的方法。我包含代码段
public void manip() {
System.out.println("ArratList (Before) :" + Array);
int sz = Array.size();
for (int i = 0; i < sz - 1; i++) {
Object o = Array.get(i);
if (o instanceof Double) {
if (Array.get(i).equals(x) & Array.get(i + 1).equals(y)) {
if (i == 1) {
Array.add(0, item);
} else {
Array.add(i - 1, item);
}
i = i + 3;
} else {
Array.remove(i - 1);
Array.remove(i - 1);
Array.remove(i - 1);
i = i - 1;
}
sz = Array.size();
}
}
System.out.println("ArratList (After) :" + Array);
}