从ArrayList检索数据时发生逻辑错误

时间:2019-07-15 18:06:40

标签: java arraylist

我正在尝试从Unity 3.5检索数据并求和第一个整数值。

我尝试了多种方法来执行此操作,但是无法获得预期的结果。我知道我的逻辑有些错误。但是我无法获得预期的结果。请帮我弄清楚。

ArrayList

预期结果

  

2汤匙橄榄油加上细毛雨(可选),10汤匙香蒜酱

代码输出

  

2汤匙橄榄油和细雨可供食用(可选),6汤匙香蒜酱,4汤匙香蒜酱

1 个答案:

答案 0 :(得分:0)

我已经理解了您的逻辑,并对代码进行了一些更改。这是您可以替换的代码块,while循环。

for(String ops : list21){

    if(sum_list.size()==0){
        sum_list.add(ops);
    }
    else{
         String str= ops.trim().replaceAll("[0-9]", "");
         String str_from_list=sum_list.get(sum_list.size()-1).replaceAll("[0-9]", "").trim();

         if(str_from_list.contains(str.trim())){
            System.out.println("found");
            int val= Integer.valueOf(sum_list.get(sum_list.size()-1).replaceFirst(".*?(\\d+).*", "$1"));
            int to_add = Integer.valueOf(ops.replaceFirst(".*?(\\d+).*", "$1"));
            int total = val+to_add;
            sum_list.set(sum_list.size()-1,total+" "+str_from_list);
         }
         else{
            sum_list.add(ops);  
         }
    }
System.out.println(sum_list);


}

注意事项

  1. 在需要时删除打印语句。
  2. 这是在考虑到只有顺序操作必须聚合的前提下完成的。

[编辑]

要检查列表中是否存在不带顺序的序列,请使用下面的代码块。

for(String ops : list21){

    if(sum_list.size()==0){
        sum_list.add(ops);
    }
    else{
        String str= ops.trim().replaceAll("[0-9]", "");
        int index=-1;
        String str_from_list=null;
        for(String str_from_l : sum_list){
            str_from_list=str_from_l.replaceAll("[0-9]", "").trim();

            if(str_from_list.contains(str.trim())){
                index=sum_list.indexOf(str_from_l);
                break;
            }
        }


         if(index!=-1){
           // System.out.println("found");
            int val= Integer.valueOf(sum_list.get(index).replaceFirst(".*?(\\d+).*", "$1"));
            int to_add = Integer.valueOf(ops.replaceFirst(".*?(\\d+).*", "$1"));
            int total = val+to_add;

            sum_list.set(index,total+" "+str_from_list);
         }
         else{
            sum_list.add(ops);  
         }
    }



}
System.out.println(sum_list);