0

下面我尝试创建一个方法,该方法在数组中搜索某个字符串并返回它的位置,如果不存在则 -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;
     }
4

2 回答 2

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);
于 2013-04-17T13:57:18.540 回答
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())){

对于大型数组,请使用二进制搜索。

于 2013-04-17T13:51:03.647 回答