Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.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没有正确删除? 静态字符串superReducedString(字符串s){ ArrayList ch=新的ArrayList(); 对于使用ArrayList的(int i=0;i_Java_Arraylist_Remove - Fatal编程技术网

Java 为什么我的ArrayList没有正确删除? 静态字符串superReducedString(字符串s){ ArrayList ch=新的ArrayList(); 对于使用ArrayList的(int i=0;i

Java 为什么我的ArrayList没有正确删除? 静态字符串superReducedString(字符串s){ ArrayList ch=新的ArrayList(); 对于使用ArrayList的(int i=0;i,java,arraylist,remove,Java,Arraylist,Remove,),当您删除(i)时,所有其他索引都将移位。 因此,如果删除索引0处的字符(对于“aaabccddd”,删除第一个“a”),ArrayList将变成“[a,a,b,c,c,d,d]”。现在删除索引1处的字符,它是第二个“a”,ArrayList现在是“[a,b,c,c,d,d,d]” remove()方法工作正常,但索引正在生成错误 要解决此问题,请尝试: static String superReducedString(String s) { ArrayList<Charact

),当您删除(i)时,所有其他索引都将移位。 因此,如果删除索引0处的字符(对于“aaabccddd”,删除第一个“a”),ArrayList将变成“[a,a,b,c,c,d,d]”。现在删除索引1处的字符,它是第二个“a”,ArrayList现在是“[a,b,c,c,d,d,d]”

remove()方法工作正常,但索引正在生成错误

要解决此问题,请尝试:

 static String superReducedString(String s) {
    ArrayList<Character> ch = new ArrayList<Character>();
    for(int i=0; i<s.length(); i++)
    {
        ch.add(s.charAt(i));
    }
    for(int i=0; i<ch.size(); i++)
    {
        ch.remove(i);
    }
    String finalarray="";
    for(int i=0; i<ch.size(); i++)
    {
        finalarray=finalarray+ ch.get(i);
    }
    return finalarray;
}
静态字符串superReducedString(字符串s){
ArrayList ch=新的ArrayList();
对于(int i=0;i=0;i--)
{
ch.删除(i);
}
字符串finalarray=“”;

对于(int i=0;i而言,问题与此代码有关:

static String superReducedString(String s) {
            ArrayList<Character> ch = new ArrayList<Character>();
            for(int i=0; i<s.length(); i++)
            {
                ch.add(s.charAt(i));
            }
            for(int i=ch.size()-1; i>=0; i--)
            {
                ch.remove(i);
            }
            String finalarray="";
            for(int i=0; i<ch.size(); i++)
            {
                finalarray=finalarray+ ch.get(i);
            }
            return finalarray;
        }
}

for(int i=0;i问题在于您正在删除循环中的元素:

    for(int i=0; i<ch.size();)
    {
        ch.remove(i);
    }

注意-如果从ArrayList及其索引中删除任何元素,则会为该ArrayList的所有元素指定一个新索引-

int size = ch.size();
for(int i=0; i < size; i++)
{
   ch.remove(0);
}
可以使用while循环从ArrayList中删除所有元素-

int size = ch.size();
for(int i=0; i < size; i++)
{
   ch.remove(0);
}
这是你修改过的代码-

while(ch.size() > 0){
        ch.remove(0);
    }
package算法;
导入java.util.ArrayList;
公共类堆垛机{
公共静态void main(字符串[]args){
字符串s=“aaabccddd”;
ArrayList ch=新的ArrayList();
对于(int i=0;i 0){
ch.remove(0);
}
字符串finalarray=“”;

对于(int i=0;i你确定你正确理解了你的作业吗

超级减少字符串“aaabccddd”应导致“abd”,而不是空字符串

例如:

aaabccddd→ abccddd→ 阿布德→ 阿布德

在Java中,这可能是一个有效的实现:

package algo;

import java.util.ArrayList;

public class stackover {
    public static void main(String[] args) {
        String s = "aaabccddd";
         ArrayList<Character> ch = new ArrayList<Character>();
    for(int i=0; i<s.length(); i++)
    {
        ch.add(s.charAt(i));
    }
    while(ch.size() > 0){
        ch.remove(0);
    }
    String finalarray="";
    for(int i=0; i<ch.size(); i++)
    {
        finalarray=finalarray+ ch.get(i);
    }
    System.out.println(finalarray);
    }
}
静态字符串superReducedString(字符串s){
String result=“空字符串”;
堆栈=新堆栈();
对于(int i=0;i
Define“not working”。您是遇到了一些错误还是仅仅得到了不想要的输出?如果是第二个选项,请提供输入、期望的输出以及您现在得到的结果。不想要的输出。对于输入“aaabccddd”,输出为“abcd”你期望的输出是什么?预期的输出是空字符串,修改你正在迭代的对象会导致奇怪的行为。考虑到代码< > 在第二个for循环中会不断增加。首先删除第一个字符(第二个字符变成第一个字符),然后删除第二个字符(前第三个)。,保留第一个字符不变,并继续删除数组中的字符。我对迭代解释投了赞成票,但我发现您建议的解决方案比它应该的更复杂。如果OP必须使用for循环,这是完美的,但如果OP必须使用for循环,则我建议只为变量分配一个新的空列表,或者如果迭代需要使用迭代器逐个删除每个元素,或者使用
while(ch.size()>0)
循环删除元素。您可能是对的,谢谢您的评论。我通常发现,在ArrayList中删除最后一个对象会更容易,不会打乱迭代……但您的建议是有效的,也更容易。
package algo;

import java.util.ArrayList;

public class stackover {
    public static void main(String[] args) {
        String s = "aaabccddd";
         ArrayList<Character> ch = new ArrayList<Character>();
    for(int i=0; i<s.length(); i++)
    {
        ch.add(s.charAt(i));
    }
    while(ch.size() > 0){
        ch.remove(0);
    }
    String finalarray="";
    for(int i=0; i<ch.size(); i++)
    {
        finalarray=finalarray+ ch.get(i);
    }
    System.out.println(finalarray);
    }
}
static String superReducedString(String s) {
  String result = "Empty String";

  Stack<Character> stack = new Stack();
  for (int i = 0; i < s.length(); ++i) {
    if (!stack.isEmpty() && stack.peek() == s.charAt(i)) {
      stack.pop();
    }
    else {
      stack.push(s.charAt(i));
    }
  }

  if (!stack.isEmpty()) {
    StringBuffer builder = new StringBuffer();
    for (char c: stack) {
      builder.append(c);
    }
    result = builder.toString();
  }

  return result;
}