user1780311
user1780311

Reputation: 25

Searching array

I'm trying to figure out how to create a method to find a string inside an array and print that string out along with its index. I think the method signature is correct but I can't figure out how to return the string value in the method.

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

Upvotes: 1

Views: 294

Answers (7)

gbtimmon
gbtimmon

Reputation: 4322

The biggest question is why implement search when java has already implemented it for you?

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

Or better yet true to you implementation

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

it should be noted that Arrays.asList DOES NOT COPY the array merely wraps it in a List structure so that it can be treated as a enumerable. The performance of this method is roughly the same as the one your provided.

Upvotes: 1

user1825203
user1825203

Reputation: 25

you can try this one .............

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

}

Upvotes: 0

Yogendra Singh
Yogendra Singh

Reputation: 34367

First fix your comparison to use the equals method as:

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

Also change last return statement as:

  return -1; //string not found

Then simply do this (use array[searchIndex] to get the string):

int searchIndex = search(array,"Dog");
if(i >= 0){
  System.out.println("String="+array[searchIndex] + ", Array Index="+searchIndex);
 }else{
   System.out.println("String not found");
 }

Upvotes: 0

John Kugelman
John Kugelman

Reputation: 361605

You can't return a String from a method that is declared to return int. The most common ways to indicate failure are to return an out-of-range value:

return -1;

Or to throw an exception:

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

Also, this line won't work:

if ( array[i] == key ) 

Strings need to be compared with equals(), not ==. The == operator checks that the strings are the same objects, not that their contents are identical.

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

And make sure that you don't call .equals() on a null reference. The above code checks for this possibility.

Upvotes: 5

Addict
Addict

Reputation: 823

You allready have String value that you are searching. Why you need to return that ? Just return index

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

Upvotes: 0

thedan
thedan

Reputation: 1240

Why do you want to return the String? Whoever calls this method already knows what the String is, because they had to provide it in the first place. (Otherwise how would know what you were looking for :P)

also you should be doing array[i].equals(key).

== is for object equality. .equals() is for value equality.

Upvotes: 4

Louis Wasserman
Louis Wasserman

Reputation: 198093

If you want to return a String, then...your return type should be String, not int.

Also, you shouldn't use == with Strings, or with most objects, use array[i].equals(key) instead.

Upvotes: 1

Related Questions