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这样的数据。我应该在哪里做出改变来支持这一点呢?非常感谢您抽出时间。它解决了这个问题。