Java 压缩ArrayList方法中的错误

Java 压缩ArrayList方法中的错误,java,arraylist,Java,Arraylist,我正试图用Java编写一个方法来压缩字符串的ArrayList。例如,如果我们有一个由字符串[“0”、“1”、“2”、“3”]组成的ArrayList,ArrayListMethods.concure([“0”、“1”、“2”、“3”])会将ArrayList更改为[“01”、“23”] import java.util.ArrayList; 公共类ArrayListMethods { 公共静态空压缩(ArrayList数组){ 对于(int i=0;i

我正试图用Java编写一个方法来压缩字符串的ArrayList。例如,如果我们有一个由字符串
[“0”、“1”、“2”、“3”]
组成的ArrayList,
ArrayListMethods.concure([“0”、“1”、“2”、“3”])
会将ArrayList更改为
[“01”、“23”]

import java.util.ArrayList;
公共类ArrayListMethods
{
公共静态空压缩(ArrayList数组){
对于(int i=0;i
我得到了一个错误,但我不知道为什么

没关系,问题解决了。我重写了如下代码:

public static void condense(ArrayList<String> array){
        for (int i = 0; i < array.size() - 1; i++){
            String one = array.get(i);
            String two = array.get(i+1);
            String both = one+two;
            array.set(i, both);
            array.remove(i + 1);
        }
    }
公共静态空压缩(ArrayList数组){
对于(int i=0;i
array.get(i)不是一个变量,它是一个方法调用,在您的情况下返回
String
。 你不能给它分配任何东西


您可能需要类似于
array.set(i,array.get(i+1))

的元素计数,如果您确保元素的计数始终为偶数,则可以执行以下操作:

public static void condense(ArrayList<String> array){
    for (int i = 0; i < array.size(); i++){
        array.set(i, array.get(i)+array.get(i + 1));
        array.remove(i + 1);
    }
}
public static void condense2(List<String> list){
    int groupSize = 2;
    List<String> result = new ArrayList<>();        
    for (int i = 0; i < list.size(); i += groupSize) {
        result.add(String.join("", list.subList(i,Math.min(i + groupSize, list.size()))));            
    }
    System.out.println(result);
}
公共静态空压缩(ArrayList数组){
对于(int i=0;i
更好的方法是:

public static void condense(ArrayList<String> array){
    for (int i = 0; i < array.size(); i++){
        array.set(i, array.get(i)+array.get(i + 1));
        array.remove(i + 1);
    }
}
public static void condense2(List<String> list){
    int groupSize = 2;
    List<String> result = new ArrayList<>();        
    for (int i = 0; i < list.size(); i += groupSize) {
        result.add(String.join("", list.subList(i,Math.min(i + groupSize, list.size()))));            
    }
    System.out.println(result);
}
publicstaticvoid-2(列表){
int-groupSize=2;
列表结果=新建ArrayList();
对于(int i=0;i

在第二种方法中,您不局限于仅连接两个字符串,通过更改groupSize,您可以从
[“0”、“1”、“2”、“3”、“4”、“5”、“6”]
的输入中获得类似
[“012”、“345”、“6”]
的内容
i+1
表示您对超出
ArrayList
范围的元素进行寻址(即
i
可以大于数组列表中的实际元素数)。就个人而言,我可能会使用一个临时的
ArrayList
,而不是可能与赋值的左侧必须是
array.get(I)+=array.get(I+1)处的变量这一事实有关
@ElliottFrisch不是
数组。get(i)
变量?@ap No.
数组。get(i)
不是变量。它是值,不是变量。它不像数组那样工作,例如a[i]+=a[i+1]似乎不工作。我得到一个
索引自动边界异常
。此外,如果它起作用,我不确定它是否能满足我的要求。我想连接ArrayList中的连续字符串。这将只是将每个字符串设置为下一个字符串的值。
array.set(i,array.get(i)+array.get(i+1))
将是正确的代码您可能会得到一个
IndexOutOfBoundsException
,因为您需要考虑奇数大小的列表(3,5,7,9,11等)。我相信你能弄清楚那个边缘的案子。