1

我试图弄清楚如何创建一种方法来查找数组中的字符串并将该字符串连同其索引一起打印出来。我认为方法签名是正确的,但我不知道如何在方法中返回字符串值。

String name = search(array,"Dog"); //the method implementation in main
System.out.println(name);

.

public static int search(String[] array, String key)
{
    for (int i= 0; i< array.length; i++)
        {
         if ( array[i] == key ) 
         return i;  
        }
     return ("Name cannot be found in array);
}
4

7 回答 7

5

您不能String从声明为 return 的方法返回 a int。指示失败的最常见方法是返回超出范围的值:

return -1;

或者抛出异常:

throw new NameNotFoundException("Name cannot be found in array");

此外,这条线不起作用:

if ( array[i] == key ) 

字符串需要与 进行比较equals(),而不是====操作员检查字符串是否是相同的对象而不是检查它们的内容是否相同。

if (key == null && array[i] == null ||
    key != null && key.equals(array[i]))

并确保您不调用.equals()空引用。上面的代码检查了这种可能性。

于 2012-12-07T21:02:34.653 回答
4

为什么要返回字符串?调用此方法的人已经知道 String 是什么,因为他们必须首先提供它。(否则怎么知道你在找什么:P)

你也应该这样做array[i].equals(key)

==是为了对象相等。 .equals()是为了价值平等。

于 2012-12-07T21:02:25.453 回答
1

如果你想返回 a String,那么......你的返回类型应该是String,而不是int

此外,您不应该使用==with Strings 或大多数对象,array[i].equals(key)而是使用。

于 2012-12-07T21:02:23.240 回答
1

最大的问题是,当 java 已经为您实现了搜索时,为什么还要实现它?

 String[] array;
 String val = "Dog";

 if( Arrays.asList(array).contains(val) ){
      System.out.println("your string is found");
 } else {
      System.out.println("your string is found");
 }

或者更好的是对你实施

 String[] array;
 String val = "Dog";
 String name = ( Arrays.asList(array).contains(val) ) ? val : "Name cannot be found in array";

应该注意的是 Arrays.asList DOES NOT COPY 数组只是将其包装在 List 结构中,以便可以将其视为可枚举。此方法的性能与您提供的方法大致相同。

于 2012-12-07T21:08:16.887 回答
0

首先修复您的比较以使用该equals方法:

  if (array[i].equals(key)) 

还将最后一个 return 语句更改为:

  return -1; //string not found

然后只需执行此操作(使用 array[searchIndex] 获取字符串):

int searchIndex = search(array,"Dog");
if(i >= 0){
  System.out.println("String="+array[searchIndex] + ", Array Index="+searchIndex);
 }else{
   System.out.println("String not found");
 }
于 2012-12-07T21:02:48.967 回答
0

您已经拥有正在搜索的字符串值。为什么需要退货?只返回索引

int index = search(array,"Dog");
于 2012-12-07T21:03:02.627 回答
0

你可以试试这个......

import java.util.*;  
public class xyz {  
 public static void main(String [] args){  
    String [] sa = {"abc","def","ghi"};  
    Arrays.asList(sa);  
    Arrays.sort(sa);  
    for(String s : sa){  
        System.out.println(s);  
    }  
}  

}

于 2012-12-07T21:12:27.510 回答