比较Hashmap和Edittext的双值时出现问题



我在尝试比较两个双值(一个值来自hashmap,另一个来自Edittext(时遇到问题。并没有错误,但同时结果是错误的。

声明的3个变量:

    double a,b,c; 
a=Double.parseDouble(Value1.getText().toString());
b=Double.parseDouble(Value2.getText().toString());
c=Double.parseDouble(Value3.getText().toString());

现在声明为Hashmap,由于hashmap不接受基元类型,因此声明如下。

HashMap<String, Double> StoreDatabasevalues =new HashMap<String, Double>();
StoreDatabasevalues.put("a",a1); //a1,a2,a3 are from database
StoreDatabasevalues.put("b",a2);
StoreDatabasevalues.put("c",a3);

尝试1:

if(a==StoreDatabasevalues.get("a") || b==StoreDatabasevalues.get("b") || c==StoreDatabasevalues.get("c")){
//mycode here
}
else if (a!=StoreDatabasevalues.get("a") || b!=StoreDatabasevalues.get("b") || c!=StoreDatabasevalues.get("c")){
//mycode here
}

这导致了故障,就好像值不同一样,控制不去else if部分。

尝试2:由于我在HashMap中没有使用基元类型,所以尝试了以下方法。

if(StoreDatabasevalues.get("a").equals(a) || StoreDatabasevalues.get("b").equals(b) || StoreDatabasevalues.get("c").equals(c)){
    //mycode here
    }
    else if (!StoreDatabasevalues.get("a").equals(a) || !StoreDatabasevalues.get("b").equals(b) || !StoreDatabasevalues.get("c").equals(c)){
    //mycode here
    }

这次尝试也是失败的,因为我给出了不同的值,但控制权不会转到else if部分。

正如我所知,您无法比较两个float、doouble值。您可以将它们与0进行比较。试试这个方法。如果d1在数值上等于d2,则此方法返回值0;如果d1在数值上小于d2,则为小于0的值;如果d1在数值上大于d2,则为大于0的值。

     // compares the two specified double values
     double d1 = 15.45;
     double d2 = 11.50;
     int retval = Double.compare(d1, d2);
     if(retval > 0) {
        System.out.println("d1 is greater than d2");
     }
     else if(retval < 0) {
        System.out.println("d1 is less than d2");
     }
     else {
        System.out.println("d1 is equal to d2");
     }

或者尝试类似的方法进行平等比较:

if(a-StoreDatabasevalues.get("a")<0.00001 || b-StoreDatabasevalues.get("b")<0.00001 || c-StoreDatabasevalues.get("c")<0.00001){
//do something
}
else if(Math.abs(a-StoreDatabasevalues.get("a"))>0.00001 || Math.abs(b-StoreDatabasevalues.get("b"))>0.00001 || Math.abs(c-StoreDatabasevalues.get("c"))>0.00001){
//do something
}

或者尝试使字符串加倍:

if(Double.parseDouble(StoreDatabasevalues.get("a")).equals(a) || Double.parseDouble(StoreDatabasevalues.get("b")).equals(b) || Double.parseDouble(StoreDatabasevalues.get("c")).equals(c)){
    //mycode here
    }
    else if (!Double.parseDouble(StoreDatabasevalues.get("a")).equals(a) || !Double.parseDouble(StoreDatabasevalues.get("b")).equals(b) || !Double.parseDouble(StoreDatabasevalues.get("c")).equals(c)){
    //mycode here
    }
if(a==StoreDatabasevalues.get("a") ||
   b==StoreDatabasevalues.get("b") ||
   c==StoreDatabasevalues.get("c")){
    //mycode 1 here
}
else if (a!=StoreDatabasevalues.get("a") ||
         b!=StoreDatabasevalues.get("b") ||             
         c!=StoreDatabasevalues.get("c")){
   //mycode 2 here
}

引用:"这导致了失败,就好像值是不同的控制不会去其他如果部分。">

确实如此:如果三个值a、b、c中至少有一个匹配,则控制将达到"mycode 1"。

使用此:

if(a==StoreDatabasevalues.get("a") &&
   b==StoreDatabasevalues.get("b") &&
   c==StoreDatabasevalues.get("c")){
    //mycode 1 here - all three values are the same.
}
else /*** if (a!=StoreDatabasevalues.get("a") ||
              b!=StoreDatabasevalues.get("b") ||             
             c!=StoreDatabasevalues.get("c"))   ***/ {
   //mycode 2 here
}

seocnd条件现在是多余的,是对第一个条件的否定。

最新更新