【问题标题】:How to cast from class type object to double type in java如何在java中从类类型对象转换为双精度类型
【发布时间】:2015-02-12 09:05:26
【问题描述】:

我有一种方法可以从两个不同的类类型列表中减去两个值。减法代码是

public LinkedHashMap<String, List<Double>> diff()
  { 
      List<Double> z=new ArrayList<Double>();
     for(int i=0;i<st_jsp.size()&&i<ref_jsp.size();i++){
         Double x=(double) ref_jsp.get(i);
         Double y=st_jsp.get(i);

          if(x>y){
              z.add(x-y);
          }
          else{
          z.add(y-x);
          }

          dif.put("", z);
       }

    return dif;

  }

这里 st_jsp 和 ref_jsp 是两个列表,例如 List&lt;Ref_user_interface&gt; st_jsp=new ArrayList&lt;Ref_user_interface&gt;();List&lt;Ref_user_interface&gt; st_jsp=new ArrayList&lt;Ref_user_interface&gt;(); Ref_user_interface 是我的类名。 这两个列表具有以下价值-

 ref.setSt1_vs1_bag6_rb(rs.getDouble(8));
 ref.setSt1_vs1_bag7_rb(rs.getDouble(9));
 ref.setSt1_vs1_bag8_rb(rs.getDouble(10));
 st_jsp.add(ref);

其中 ref 是 Ref_user_interface ref=new Ref_user_interface(); 在我的减法中,我得到一个 ** cannot convert from Ref_user_interface to Double** on line Double x= ref_jsp.get(i);Double y=st_jsp.get(i);。 有什么方法可以让我从两个包含对象类型数据的列表中减去我的值。?

EDIT-1 我有 getter 和 setter 方法。但是对于 list 的每个值,我是否必须包含 getter 方法?对于我的 getter 和 setter 方法,请访问链接setter method of mine

EDIT-2

你的所有答案都改变了我的减法方法-

public LinkedHashMap<String, List<Double>> diff()
  {  

     List<Double> z=new ArrayList<Double>();

     for(int i=0;i<st_jsp.size()&&i<ref_jsp.size();i++)
     {
            Comaprision refObj = ref_jsp.get(i);
            Comaprision stObj = st_jsp.get(i);
            Double x =refObj.getBeam_current();
            x+=refObj.getBeam_energy();
            x+=refObj.getSt2_vs2_bag1_rb();
            x+=refObj.getSt2_vs2_bag2_rb();
            x+=refObj.getSt2_vs2_bag3_rb();
            x+=refObj.getSt2_vs2_bag4_rb();
            x+=refObj.getSt2_vs2_bag5_rb();
            x+=refObj.getSt2_vs2_bag6_rb();
            x+=refObj.getSt2_vs2_bag7_rb();
            x+=refObj.getSt2_vs2_bag8_rb();
            x+=refObj.getSt2_vs2_bag9_rb();
             Double y = stObj.getBeam_current();
            y+=stObj.getBeam_energy();
            y+=stObj.getSt2_vs2_bag1_rb();
            y+=stObj.getSt2_vs2_bag2_rb();
            y+=stObj.getSt2_vs2_bag3_rb();
            y+=stObj.getSt2_vs2_bag4_rb();
            y+=stObj.getSt2_vs2_bag5_rb();
            y+=stObj.getSt2_vs2_bag6_rb();
            y+=stObj.getSt2_vs2_bag7_rb();
            y+=stObj.getSt2_vs2_bag8_rb();



          if((x>y)){

              z.add(x-y);
          }
          else{
          z.add(y-x);

          dif.put("", z);

       }
    return dif;

  }

但我不明白是否正在添加 1 个索引处的所有值,然后在索引 1 处与 y 进行映射等等。此外,这个循环给了我 42 个值。我的 ref_jsp 有21 行,st_jsp 有 78 行,但这些行的值重复了两次。我 无法理解这个 for 循环。请帮我解释一下。我不知道想将我的值加到一个索引处,

我的实际问题是 -->我只想将 x 的每个索引的 getter 值与 y 的每个索引的 getter 值进行比较并找出差异。

【问题讨论】:

  • 如何在Double x中获取setter在list st_jsp中的所有getter方法,在Double y变量中获取setter在list ref_jsp中的所有getter方法,然后进行比较。?跨度>

标签: java list object casting subtraction


【解决方案1】:

问题是您的列表返回 Ref_user_interface 的对象,因此您可以通过调用 getter 方法来获取值

ref_jsp.get(i).getSt1_vs1_bag6_rb()

如果你想要所有的 getter 方法,请在你的 for 循环中试试这个

for(int i=0;i<st_jsp.size()&&i<ref_jsp.size();i++){
    Ref_user_interface refObj = ref_jsp.get(i);
    Ref_user_interface stObj = st_jsp.get(i);
    Double x = refObj.getSt1_vs1_bag6_rb();
    Double y = stObj.getSt1_vs1_bag6_rb();
    comparing(x,y);
    x =refObj.getSt1_vs1_bag7_rb();
    y = stObj.getSt1_vs1_bag7_rb();
    comparing(x,y)

     // and so on for all the getters method you have for this obj

     public void comparing(Double x,Double y){
           // write your comparing logic here and add value in map
          if(x > 0 && y > 0){
              if(x>y){
                 z.add(x-y);  
              }else{
                 z.add(y-x); 
              }  
          }else if(x>0){
             z.add(x);
          }else{
             z.add(y);
          }     
     }

依此类推,你得到所有你想要的值,然后根据你的逻辑使用它。

【讨论】:

  • 我有 getter 和 setter 方法,但我有 10 个 getter 方法。所以对于每个 get(i),我必须使用 ref_jsp.get(i).getSt1_vs1_bag6_rb() 来获得 6 个值,ref_jsp。 get(i).getSt1_vs1_bag7_rb() 为 7 值等等??
  • 这取决于您和您的逻辑,如果您想要 st1_vs1_bag6_rb 的值,那么您必须调用 getSt1_vs1_bag6_rb() 来返回值
  • 我的两个列表都包含来自接受 setter 方法的所有值,我想从两个列表中逐一比较值。那么如何为双变量 x 和 y 提供值? ?
  • 我做到了。我在问我的变量 double x 如何保存列表 ref_jsp 中的所有值,而 y 保存列表 st_jsp 中的所有值。在这种情况下,变量只保存单个值。如果它们保存单个值,那么我将如何执行 if 循环并将值放入映射中??
  • @MES 你想要 x 变量中 ref_jsp 的所有双精度值和 y 变量中 st_jsp 的值,然后比较 x 和 y 还是想要两者的单个值比较
【解决方案2】:

你需要一个像这个 setter ref.setSt1_vs1_bag6_rb(rs.getDouble(8)); 这样的 getter .当你调用ref_jsp.get(i) 时它返回Ref_user_interface 然后你需要调用新的getter 方法来得到你想要的。

更新:

Double[] dbl_x = new Double[ref_jsp.size()];
Double[] dbl_y = new Double[ref_jsp.size()];
for(int i=0; i<ref_jsp.size(); i++){
   dbl_x[i] = ref_jsp.get(i).getSt1_vs1_bag6_rb();
}

for(int i=0; i<ref_jsp.size(); i++){
   dbl_y[i] = st_jsp.get(i).getSt1_vs1_bag6_rb();
}

最后,您有两个数组 dbl_x 和 dbl_y,这些数组包含 x 和 y 值(您之前提到过)

那么你所要做的就是比较这两个数组并做出决定。

for(){
   if(dbl_x[i] > dbl_y[i]){
     // do this.
   }else{
     // do that.
   }
}

上面的代码 sn-p 将为您提供一个包含所需值的双精度数组。对其他一组值执行此操作并比较两个数组。

注意:getSt1_vs1_bag6_rb() 是返回所需值的 getter 方法。阅读about getters here

【讨论】:

  • 我可以将变量 x 设为列表并将 ref_jsp 列表中的所有值放入其中吗??
  • 不,它只存储第 i 个元素 例如:Ref_user_interface x=ref_jsp.get(i); 这里 x 只有一个元素在第 i 个位置
  • 那么,如何将所有 ref_st 列表值放入 x 变量中并与相应的 y 变量进行比较??
  • @MES 用做你想做的方式更新了答案
  • ,我无法理解 getSt1_vs1_bag6_rb();将始终给出一个值,那么循环的用途是什么。与此 getter 方法类似,我还有 9 个其他具有不同值的 getter 方法,所以我也必须为它们执行这个 for 循环。我现在完全糊涂了。跨度>
猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2016-03-13
相关资源
最近更新 更多