Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从ArrayList检索数据时出现逻辑错误_Java_Arraylist - Fatal编程技术网

Java 从ArrayList检索数据时出现逻辑错误

Java 从ArrayList检索数据时出现逻辑错误,java,arraylist,Java,Arraylist,我正在尝试从ArrayList检索数据,并对第一个整数值求和 我尝试了多种方法,但都没有达到预期的效果。我知道我的逻辑有点错误。但我无法得到预期的结果。请帮我弄清楚 int sum = 0; List<String> sum_list = new ArrayList<>(); List<String> list21 = new ArrayList<>(); list21.add("1 tbsp olive oil plus a drizzle t

我正在尝试从
ArrayList
检索数据,并对第一个整数值求和

我尝试了多种方法,但都没有达到预期的效果。我知道我的逻辑有点错误。但我无法得到预期的结果。请帮我弄清楚

int sum = 0;

List<String> sum_list = new ArrayList<>();
List<String> list21 = new ArrayList<>();
list21.add("1 tbsp olive oil plus a drizzle to serve (optional)");
list21.add("1 tbsp olive oil plus a drizzle to serve (optional)");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
int i = 0;
while (i < list21.size()) {

    String str1 = list21.get(i).trim().replaceAll("[0-9]", "");
    String str2 = list21.get(i + 1).trim().replaceAll("[0-9]", "");

    if (str1.equals(str2)) {

        sum += Integer.valueOf(list21.get(i).replaceFirst(".*?(\\d+).*", "$1"))
                + Integer.valueOf(list21.get(i).replaceFirst(".*?(\\d+).*", "$1"));
        // System.out.println("Sum=" + sum);
        try {
            if (!sum_list.isEmpty() && !sum_list.get(sum_list.size() - 1).trim().replaceAll("[0-9]", "").contains(str2)) {
                sum_list.add(sum + " " + str1);
                sum = 0;
            } else sum_list.add(sum + " " + str1);

        } catch (Exception e) {
        }
    }

    i = i + 2;
}
System.out.println(sum_list.toString());
int和=0;
List sum_List=new ArrayList();
List list21=新的ArrayList();
清单21.添加(“1汤匙橄榄油加上毛毛细雨即可食用(可选)”;
清单21.添加(“1汤匙橄榄油加上毛毛细雨即可食用(可选)”;
清单21.添加(“2汤匙香蒜酱”);
清单21.添加(“2汤匙香蒜酱”);
清单21.添加(“2汤匙香蒜酱”);
清单21.添加(“2汤匙香蒜酱”);
int i=0;
而(i
预期结果

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

代码的输出

2汤匙橄榄油加上小雨即可食用(可选),6汤匙香蒜酱,4汤匙香蒜酱


我已经理解了您的逻辑,并对代码进行了一些更改。下面是可以替换的代码块,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);


}
注意事项

  • 如果需要,请删除打印语句
  • 这样做的前提是只需聚合顺序操作 [编辑]

    要检查列表中是否没有顺序,请使用下面的代码块

    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);
    

    我已经理解了您的逻辑,并对代码进行了一些更改。下面是可以替换的代码块,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);
    
    
    }
    
    注意事项

  • 如果需要,请删除打印语句
  • 这样做的前提是只需聚合顺序操作 [编辑]

    要检查列表中是否没有顺序,请使用下面的代码块

    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);
    

    您可以通过使用较少的变量进行自由优化,并根据标准更改变量名称。谢谢您的回答。这可以用在一般术语顺序中吗?我的意思是在任何排序的
    ArrayList
    中,因为我必须在我的项目中使用它?是的。如果您有一个排序的ArrayList,它将工作正常。如果订单为1 tbsp A、1 tbsp B、1 tbsp A,则结果将相同,而不是2 tbsp A、1 tbsp B,则会出现问题。如果您希望以这种方式重新定义逻辑,请告知我。如果您觉得此答案有用,请单击此答案左侧的勾号,将其标记为已接受。如果你同意答案,请随意投票。我在这个表格中有2tbsp,1tbsp这样的数据。我应该在哪里做出改变来支持这一点呢?非常感谢您抽出时间。它解决了这个问题。您可以通过使用较少的变量进行优化,并根据标准更改变量名称。谢谢您的回答。这可以用在一般术语顺序中吗?我的意思是在任何排序的
    ArrayList
    中,因为我必须在我的项目中使用它?是的。如果您有一个排序的ArrayList,它将工作正常。如果订单为1 tbsp A、1 tbsp B、1 tbsp A,则结果将相同,而不是2 tbsp A、1 tbsp B,则会出现问题。如果您希望以这种方式重新定义逻辑,请告知我。如果您觉得此答案有用,请单击此答案左侧的勾号,将其标记为已接受。如果你同意答案,请随意投票。我在这个表格中有2tbsp,1tbsp这样的数据。我应该在哪里做出改变来支持这一点呢?非常感谢您抽出时间。它解决了这个问题。