Java 去除均匀长度

Java 去除均匀长度,java,Java,编写一个RemoveEventLength方法,该方法将字符串的ArrayList作为参数,并从列表中删除所有偶数长度的字符串 public void removeEvenLength(ArrayList <String> stringList){ for(int i=0;i<stringList.size();i++){ String word=stringList.get(i); if(word.length()%2==0){//ev

编写一个RemoveEventLength方法,该方法将字符串的ArrayList作为参数,并从列表中删除所有偶数长度的字符串

public void removeEvenLength(ArrayList <String> stringList){
    for(int i=0;i<stringList.size();i++){
        String word=stringList.get(i);
        if(word.length()%2==0){//even
            stringList.remove(word);//if it is even,test from the first word  then continue looping


        }


    }
}

当我尝试传入[This,is,a,test]时,它应该返回a。但是它却给了我is,a。有什么问题吗?

提示:您正在迭代期间从列表中删除当前项。考虑一下这可能会对随后的迭代产生什么影响。

提示:您正在迭代期间从列表中删除当前项。想一想这会对接下来的迭代产生什么影响

public static void removeEvenLength(ArrayList <String> stringList){
        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            System.out.println(word+" "+word.length()+" "+word.length()%2);
            if(word.length()%2==0){//even
                System.out.println("Rmoving "+word);
                stringList.remove(word);
                removeEvenLength(stringList);//Recursive call
            }
        }
    }
使用递归调用函数


使用递归调用函数。

您能试试下面的方法吗?它对我有用

import java.util.*;

class Fun
{
    public static void removeEvenLength(ArrayList <String> stringList){
        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            if(word.length()%2==0){//even
                stringList.remove(word);//if it is
                i = i-1;
                continue;
            }
        }

        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            System.out.println(word);
        }
    }

public static void main(String []args)
{
    ArrayList <String> stringList = new ArrayList <String>();
    stringList.add("this");
    stringList.add("is");
    stringList.add("a");
    stringList.add("test");
    removeEvenLength(stringList);
}

}你能试试下面的吗?它对我有用

import java.util.*;

class Fun
{
    public static void removeEvenLength(ArrayList <String> stringList){
        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            if(word.length()%2==0){//even
                stringList.remove(word);//if it is
                i = i-1;
                continue;
            }
        }

        for(int i=0;i<stringList.size();i++){
            String word=stringList.get(i);
            System.out.println(word);
        }
    }

public static void main(String []args)
{
    ArrayList <String> stringList = new ArrayList <String>();
    stringList.add("this");
    stringList.add("is");
    stringList.add("a");
    stringList.add("test");
    removeEvenLength(stringList);
}

}

在循环列表时从列表中删除项目时,请使用迭代器。它会帮你解决这个问题

public void removeEvenLength( List<String> stringList ) {
    Iterator<String> iterator = stringList.iterator();
    while( iterator.hasNext() ) {
        final String word = iterator.next();
        if( word.length() % 2 == 0 ) {
            iterator.remove();
        }
    }
}
更好的方法是创建一个包含所有奇数长度值的新列表。这样您就不会修改原始列表。一般来说,没有副作用的功能越多越好

public List<String> removeEvenLength( List<String> stringList ) {
    List<String> oddList = new ArrayList<String>();
    for( String word : stringList ) {
        if( word.length % 2 == 1 ) {
            oddList.add( word );
        }
    }
    return oddList;
}

在循环列表时从列表中删除项目时,请使用迭代器。它会帮你解决这个问题

public void removeEvenLength( List<String> stringList ) {
    Iterator<String> iterator = stringList.iterator();
    while( iterator.hasNext() ) {
        final String word = iterator.next();
        if( word.length() % 2 == 0 ) {
            iterator.remove();
        }
    }
}
更好的方法是创建一个包含所有奇数长度值的新列表。这样您就不会修改原始列表。一般来说,没有副作用的功能越多越好

public List<String> removeEvenLength( List<String> stringList ) {
    List<String> oddList = new ArrayList<String>();
    for( String word : stringList ) {
        if( word.length % 2 == 1 ) {
            oddList.add( word );
        }
    }
    return oddList;
}

在Java 8中,您可以使用RemoveiPredicate从集合中删除元素,而无需手动创建迭代器:


在Java 8中,您可以使用RemoveiPredicate从集合中删除元素,而无需手动创建迭代器:


这是我的做法:

public static void removeEvenLength(ArrayList<String> l){

    ArrayList<String> temp = new ArrayList<>();
    for(String word : l){

        if(word.length()%2==0){temp.add(word);}

    }

    l.removeAll(temp);
    


}

这是我的做法:

public static void removeEvenLength(ArrayList<String> l){

    ArrayList<String> temp = new ArrayList<>();
    for(String word : l){

        if(word.length()%2==0){temp.add(word);}

    }

    l.removeAll(temp);
    


}


在海事组织,这是一个有效的问题。这是一个常见的新手错误。我不认为有必要进行向下投票。对不起。事实上,我重复了我的java模块,因此我的概念非常薄弱,因此我可能倾向于提出更简单的问题。你应该注意,这不一定是处理列表的坏模式,但一旦你开始处理foreach循环,它就会崩溃。我只是对你的问题的向下投票作出了反应。你表现出了努力,却在一个问题上绊倒了,我不明白反对票是从哪里来的。这是一个常见的新手错误。我不认为有必要进行向下投票。对不起。事实上,我重复了我的java模块,因此我的概念非常薄弱,因此我可能倾向于提出更简单的问题。你应该注意,这不一定是处理列表的坏模式,但一旦你开始处理foreach循环,它就会崩溃。我只是对你的问题的向下投票作出了反应。你付出了努力,却意外地发现了一个问题,我不明白反对票是从哪里来的。因此,如果我删除它,我应该I=I+1吗?@user2179615:我让你去弄清楚需要发生什么。我设法用I=I-1得到答案。但我不明白。因为我扣除了一个值,我不是应该加回去而不是减吗?在你删除后想想列表的大小。如果我删除它,我应该i=i+1吗?@user2179615:我把它留给你去弄清楚需要发生什么。我设法用i=i-1得到答案。但我不明白。因为我扣除了一个值,我不应该加回去而不是减吗?想想移除后列表的大小为什么需要递归?当然还有其他方法。对我来说,这一种更简单。如果使用递归,为什么要循环列表?这个例子需要做一些工作。在这个例子中,递归方面是完全无用的。你为什么需要递归?当然还有其他方法。对我来说,这一种更简单。如果你使用递归,为什么要循环列表?这个例子需要做一些工作。在这个例子中,递归方面是完全无用的。