我正在试图找出如何创建一个方法来查找数组中的字符串并将该字符串与其索引一起打印出来。我认为方法签名是正确的,但我无法弄清楚如何在方法中返回字符串值。
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);
}
答案 0 :(得分:5)
您无法从声明返回String
的方法返回int
。指示失败的最常见方法是返回超出范围的值:
return -1;
或抛出异常:
throw new NameNotFoundException("Name cannot be found in array");
此外,此行不起作用:
if ( array[i] == key )
字符串必须为compared with equals()
, not ==
。 ==
运算符检查字符串是否与对象相同,而不是内容相同。
if (key == null && array[i] == null ||
key != null && key.equals(array[i]))
确保不要在空引用上调用.equals()
。上面的代码检查了这种可能性。
答案 1 :(得分:4)
为什么要返回字符串?调用此方法的人已经知道String是什么,因为他们必须首先提供它。 (否则怎么会知道你在找什么:P)
你也应该做array[i].equals(key)
。
==
用于对象相等。
.equals()
用于价值平等。
答案 2 :(得分:1)
如果您想返回String
,那么......您的返回类型应为String
,而不是int
。
此外,您不应该将==
与String
一起使用,或者对大多数对象使用array[i].equals(key)
代替。
答案 3 :(得分: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不会复制数组只是将它包装在List结构中,以便可以将其视为可枚举。此方法的性能与您提供的方法大致相同。
答案 4 :(得分:0)
首先修复您的比较以使用equals
方法:
if (array[i].equals(key))
同时将上一个返回语句更改为:
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");
}
答案 5 :(得分:0)
您已经拥有要搜索的字符串值。为什么你需要归还? 只需返回索引
int index = search(array,"Dog");
答案 6 :(得分: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);
}
}
}