Java 删除不起作用的较短字符串
编写一个方法Java 删除不起作用的较短字符串,java,Java,编写一个方法removeShortStrings,该方法将ArrayList作为参数,并从每个连续的值对中删除该对中较短的字符串 例如,假设名为list的ArrayList包含以下值:{four”,“score”,“and”,“seven”,“year”,“ago”} 在第一对中,“四”和“分数”,较短的字符串是“四” 在第二对中,“和”以及“七个”,较短的字符串是“和” 在第三对中,“years”和“ago”,较短的字符串是“ago” 因此,调用:removeShortString(list)
removeShortStrings
,该方法将ArrayList
作为参数,并从每个连续的值对中删除该对中较短的字符串
例如,假设名为list
的ArrayList
包含以下值:{four”,“score”,“and”,“seven”,“year”,“ago”}
在第一对中,“四”和“分数”
,较短的字符串是“四”
在第二对中,“和”
以及“七个”
,较短的字符串是“和”
在第三对中,“years”
和“ago”
,较短的字符串是“ago”
因此,调用:removeShortString(list)
应该删除这些较短的字符串,留下如下列表:{“score”、“seven”、“year”}
如果存在平局(两个字符串具有相同的长度),则您的方法应删除该对中的第一个字符串。如果列表中有奇数个字符串,则最终值应保留在列表中
public void removeShorterStrings(ArrayList <String> a){
for(int i=0;i<a.size()-1;i+=2){
String word=a.get(i);
String word2=a.get(i+1);
if(a.size()%2==0 && word.length()<word2.length()){
a.remove(i);
if(word.length()==word2.length()){
a.remove(i);
}
}
}
}
public void removeShortString(ArrayList a){
对于(int i=0;i您的测试a.size()%2==0
是针对每一对进行的,这不是必需的。只需将其删除即可。由于您已经从列表中删除了项目,您只需要增加一个。由于您的比较对,您需要在循环中删除其中一个
这个能产生[分数,七,年]
public void removeShorterStrings(ArrayList <String> a){
for(int i=0;i<a.size()-1;i++){
String word=a.get(i);
String word2=a.get(i+1);
if(word.length()<word2.length()){
a.remove(i);
} else {
a.remove(i+1)
}
}
}
public void removeShortString(ArrayList a){
对于(int i=0;i,您的问题是从列表中删除元素,但继续使用旧索引。克服此问题的最简单方法是向后遍历数组:
public void removeShorterStrings(ArrayList <String> a){
for(int i=a.size()/2-1; i>=0; i--){
String word=a.get(2*i);
String word2=a.get(2*i+1);
if(word.length()<=word2.length()){
a.remove(2*i);
} else {
a.remove(2*i+1);
}
}
}
public void removeShortString(ArrayList a){
对于(int i=a.size()/2-1;i>=0;i--){
字符串字=a.get(2*i);
stringword2=a.get(2*i+1);
如果(word.length()不能在for循环中更改列表,并在列表元素上迭代。(除非在删除元素后处理索引)
假设移除第一个元素(i=0),然后第二个元素(索引1)成为第一个元素,依此类推。
现在,当你增加i时,你得到了第二对,它最初是第四和第五对(而不是第三和第四对)
首先试着去理解它
这就是为什么在迭代列表时不能更改列表(除非使用迭代器)
另一件事-您不需要检查a.size()%2==0
。还有许多其他方法可以做到这一点。注意您这里有一些主要问题
首先
公共静态void removeShortString(ArrayList ArrayList){
对于(int i=0;i if(arrayList.get(i).length(),除非您向后移动:)如果您通过++i
更改i+=2
并添加否则{++i;}
您可以执行a.remove(i)
。这正是“除非您在删除元素后处理当前索引”除非我向后移动?你的意思是在for循环中它应该是i--?它可以,或者在删除元素时减少i。@baraky是的,我在groovyConsoleRemoveShortString([“四”,“分数”,“和”,“七”,“年”,“年”,“以前])中运行过它你的循环体可以用一行来表达。你可以考虑编辑很多冗余代码,特别是为单词声明局部变量。@波希米亚我知道这是可以优化的,我想显示原始代码需要什么改变才能使它工作,而不是建立最佳的解决方案。“在java中做得好的技巧”不适合此网站。阅读编程入门或Java入门书籍(谷歌为好的一本)或更好地解释事情可能会有所帮助。你也可以在某处找到逻辑思维书籍或课程。阅读基本编程博客也可能会有所帮助。
for(int i=0;i<a.size()-1;i+=2){
if(a.size()%2==0 && word.length()<word2.length()){
a.remove(i);
if(word.length()==word2.length()){
a.remove(i);
}
}
for(int i=0;i<a.size()-1;i++){
String word=a.get(i);
String word2=a.get(i+1);
if(word.length()<=word2.length()){
a.remove(i);
}
else
a.remove(i+1);
}
public static void removeShorterStrings(ArrayList<String> arrayList){
for(int i = 0; i < arrayList.size()-1; i++){
if(arrayList.get(i).length() <= arrayList.get(i + 1).length()){
arrayList.remove(i);
}
else{
arrayList.remove(i + 1);
i++;
}
}
}