2013-04-11 2 views
0

Здравствуйте, снова переполнение стека .. ers, Я создал этот бит кода для последовательного поиска по массиву, чтобы найти значение, в данном случае это имя. Однако я не могу заставить его работать, он не найдет имя, которое я набираю, и всегда возвращает значение -1.Последовательный поиск строк в Java

Когда я сменил все типы на INT и выполнил поиск по возрастному массиву, он работал, поэтому он может иметь какое-то отношение к типу строки? Может кто-нибудь, пожалуйста, помогите мне?

государственной статической силы основных (String [] арг) {

String[] name = {"John", "bert", "Elle", "beth"}; 
    String[] sex = {"Male", "Male", "female", "female"}; 
    int[] age = {18, 25, 22, 36}; 
    int found; 

    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Enter name to search: "); 

    String searchName = keyboard.next(); 

    found = searchNames(name, searchName); 

    if(found == -1) 
     System.out.println("Error, not found: " + found); 
    else 
     System.out.println("Found At: " + found); 

} 

private static int searchNames(String[] name, String searchName) { 

    int i = 0, foundAt = -1; 
    boolean found = false; 

    while (!found && i < name.length) 
    { 
     if (name[i] == searchName) 
     { 
      found = true; 
      foundAt = i; 
     } 
     i++; 
    } 
    return foundAt; 
} 
+1

именно, что вам нужно сделать 'имя [я] .equals (searchName)' вместо этого. – iamnotmaynard

ответ

1

Это будет закрыта в ближайшее время, но использовать .equals() для сравнения строк.

0

Попробуйте заменить эту часть вашего кода

while (!found && i < name.length) 
{ 
    if (name[i] == searchName) 
    { 
     found = true; 
     foundAt = i; 
    } 
    i++; 
} 

с

for(int i=0; i<name.length; i++) 
{ 
    if(name[i].equalsIgnoreCase(searchName)) 
    { 
     found = true; 
     foundAt = i; 
     break; 
    } 
}