2017-02-06 3 views
0

Итак, у меня есть следующий код и независимо от того, что он возвращает мне -1. Я хочу иметь его так, чтобы, если идентификатор совпадает, он возвращает и индексирует, но если он не совпадает после запуска всего набора данных, он возвращает отрицательный. Где я буду неправильно здесь:Java возвращает беды

public class StudentCollection { 

private String[] ids = new String[] {"Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty"}; // keeps identification numbers of students 
private String [] names = new String[] {"Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty","Empty"};; // keeps the names of students 
private int size = 0; // number of students currently in the collection 


private int findIndex(String id) { 
    int noIndex = 1; 
    for (int i=0;i<ids.length;i++){ 
     if((ids[i].equalsIgnoreCase(id))){ 
      System.out.println("The index of this student is " +i); 
      } 

     else { 
      noIndex = -1; 
      System.out.println(noIndex); 
      break;}  
    } 

    return noIndex; 
} 
+1

Что такое 'ids' в вашем коде? –

+1

Подсказка: где вы устанавливаете noIndex для значения, которое хотите вернуть? Когда вы должны ломаться? Почему вы отрицаете результат equalsIgnoreCase? – samgak

ответ

1

Вот решение, где, если индекс найден, то его номер возвращается, остальное, если оно не после проверки всего массива, -1 возвращается и печатаются соответствующие строки.

private int findIndex(String id) { 
    int noIndex = -1; 
    for (int i = 0; i < ids.length; i++) { 
     if (ids[i].equalsIgnoreCase(id)) { 
      System.out.println("The index of this student is " + i); 
      return i; 
     } 
    } 
    System.out.println(noIndex); 
    return noIndex; 
} 

Вы также можете использовать Java 8 Stream:

private int findIndex(String id) { 
    OptionalInt index = IntStream.rangeClosed(0, ids.length-1) 
           .filter(i -> ids[i].equalsIgnoreCase(id)) 
           .findFirst(); 
    if(index.isPresent()) { 
     int i = index.getAsInt(); 
     System.out.println("The index of this student is " + i); 
     return i; 
    } 
    System.out.println(-1); 
    return -1; 
} 
+0

Спасибо, что сработали! И я понимаю, почему он тоже делает – Oluwatosin

0

я думаю, что нужно что-то вроде этого:

private int findIndex(String id) { 

    for (int i=0; i<ids.length; i++){ 

     if(ids[i].equalsIgnoreCase(id)){ 

      System.out.println("The index of this student is " +i); 

      return i; 
     } 
    } 

    return -1; 
} 
+0

Второй метод чувствителен к регистру, поэтому не будет работать. –

+0

На самом деле, я думаю, что вы правы (y) –

+1

Тогда исправьте это, иначе придут некоторые downvoters (не я;). –

1

Прямо сейчас у вас есть это так, когда ids[i].equalsIgnoreCase(id) верно, то будет установлен noIndex к -1 (в операторе еще) и разорвать на который сделает его возвратом -1. Если это неверно, оно распечатает индекс. Как и все остальные, уже размещены, вот код для поиска индекса.

private int findIndex(String id) { 
    for (int i=0;i<ids.length;i++){ 
     if(ids[i].equalsIgnoreCase(id)){ 
      return i; 
     } 
    } 

    return -1; 
} 
+0

OP также печатает их перед возвратом. –