我正在做学校作业,遇到了一些麻烦。基本上,我有一个具有String name属性的对象数组,我想用一个关键字搜索该数组,然后挑选出带有该单词的任何对象并将其存储到另一个数组中。我只能使用一个数组,而不能使用arraylist或treemaps等。我遇到一个问题,它仅获取一个对象而不是其他对象,关键字为“ is”。
这是我到目前为止所拥有的:
import java.util.Arrays;
public class TesterTwo
{
public static void main(String[] args)
{
TestObj t1 = new TestObj("Where is my house",1);
TestObj t2 = new TestObj("Canada is really cold",2);
TestObj t3 = new TestObj("It's a big world",3);
TestObj t4 = new TestObj("What is This",4);
TestObj t5 = new TestObj("I'm at home",5);
TestObj[] thingy = new TestObj[]{t1,t2,t3,t4,t5};
System.out.println("BEFORE");
for(int a = 0; a < thingy.length; a++)
{
System.out.println(thingy[a].getName());
}
TestObj [] searchResult = new TestObj[5];
for (int i = 0; i < thingy.length; i++)
{
if(thingy[i].getName().contains("is"))
{
int j = 0;
searchResult[j] = thingy[i];
j++;
}else{continue;}
}
thingy = searchResult;
System.out.println("After the search has gone through:");
System.out.println("");
for(int i = 0; i < thingy.length; i++){
if(thingy[i] == null){break;}
System.out.println(thingy[i].getName());
}
}
}
编辑:我发现我做错了我的坏事。这是我的解决方法:
TestObj [] searchResult = new TestObj[thingy.length];
for (int i = 0, k=0; i < thingy.length; i++)
{
if(!thingy[i].getName().contains("is"))
{
continue;
}
searchResult[k++] = thingy[i];
}
thingy = searchResult;
问题在于声明的j
整数变量的范围内。现在,您已在for
循环内部声明了它,从而使j
的范围仅可用于单个迭代。在迭代结束时,将删除j
变量,新的迭代将生成新的变量。将j
的声明移到for
循环之外:
int j =0;
for (int i = 0; i < thingy.length; i++)
{
if(thingy[i].getName().contains("is"))
{
//...
另外,不需要整个else
语句,因为if
语句有点在循环中,如果if
为假,则循环将尝试进行下一个迭代。