下面我试图创建一个方法,在数组中搜索某个字符串并返回它的位置,如果不存在,那么-1应该是返回的数字。下面我使用该方法搜索一个单词,即使单词在数组中,它也会返回-1。这是为什么?
String answer = "";
System.out.println("Enter word to search within array");
answer = in.next();
public static int search(String[] theWords, String answer) {
int a = -1;
for(int i = 0; i < theWords.length; i++) {
if (answer.equals(theWords[i])){
a = i;
break;
}
}
return a;
}
答案 0 :(得分:4)
我看不出代码有什么问题,但我建议删除保存返回值的局部变量:
public static int Search(String[] thewords, String answer) {
for (int i = 0; i < thewords.length; i++) {
if (answer.equals(thewords[i])){
return i;
}
}
return -1;
}
使用这种简化的逻辑,此代码中很少或根本没有错误。
我认为这是课程工作,不允许使用库方法。如果您被允许,您的方法可以是一行:
return Arrays.asList(theWords).indexOf(answer);
答案 1 :(得分:1)
您可以选择复制数组,因为方法的使用者可能不需要排序
public static int Search(String[] thewords, String answer) {
if(thewords == null) {
throw new NullPointerException();
}
String[] copy = new String[thewords.length];
System.arraycopy(thewords,0,copy,0,copy.length);
Arrays.sort(thewords);
return Arrays.binarySearch(thewords, answer);
}
注意:它会返回-pos
而不是-1
如果您需要-1
:
public static int Search(String[] thewords, String answer) {
if(thewords == null) {
throw new NullPointerException();
}
String[] copy = new String[thewords.length];
System.arraycopy(thewords,0,copy,0,copy.length);
Arrays.sort(thewords);
int idx = Arrays.binarySearch(thewords, answer);
return idx < 0? -1:idx;
}
关于您的代码:我认为问题与套管或间距有关:
替换为:if (answer.equalsIgnoreCase(theWords[i].trim())){
对于大型数组,请使用二进制搜索。