繁体   English   中英

搜索数组

[英]Searching array

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

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);
}

你不能返回一个String从被声明为返回的方法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() 上面的代码检查这种可能性。

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

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

==用于对象相等。 .equals()用于价值平等。

如果您想返回一个String ,那么...您的返回类型应该是String ,而不是int

同样,您不应该在String或大多数对象上使用== ,而应使用array[i].equals(key)

最大的问题是,为什么在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不会复制数组,只是将其包装在List结构中,以便可以将其视为可枚举的数组。 此方法的性能与您提供的方法大致相同。

首先将您的比较固定为使用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");
 }

您已经准备好要搜索的String值。 为什么需要退货? 刚返回索引

int index = search(array,"Dog");

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

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);  
    }  
}  

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM