2017-02-06 6 views
0

Okay, so habe ich den folgenden Code und egal, was es mir -1 zurückgibt. Ich möchte es so haben, dass, wenn die ID übereinstimmt, es zurückgibt und indexiert, aber wenn es nach dem Durchlaufen des gesamten Datensatzes nicht übereinstimmt, gibt es einen negativen zurück. Wohin gehe ich hier falsch:Java kehrt zurück

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

Was ist 'ids' in Ihrem Code? –

+1

Hinweis: Wo setzen Sie noIndex auf den Wert, den Sie zurückgeben möchten? Wann solltest du brechen? Warum negieren Sie das Ergebnis von equalsIgnoreCase? – samgak

Antwort

1

Hier ist die Lösung, wo, wenn Index gefunden wird, dann wird die Nummer zurückgegeben, sonst, wenn dies nicht der Fall Nach dem Überprüfen des gesamten Arrays wird -1 zurückgegeben und entsprechende Strings werden gedruckt.

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

Sie können auch Java 8-Stream verwenden:

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

Danke, das hat funktioniert! Und ich verstehe, warum es auch tut – Oluwatosin

0

Ich glaube, Sie so etwas wie dieses brauchen:

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

Die zweite Methode ist Groß-und Kleinschreibung, wird daher nicht funktionieren. –

+0

Eigentlich denke ich, Sie haben Recht (y) –

+1

es dann korrigieren, sonst einige downvoters kommen (nicht ich;). –

1

Gerade jetzt Sie es so haben, wenn ids[i].equalsIgnoreCase(id) wahr ist, wird es noIndex auf -1 (in der else-Anweisung) festgelegt und brechen die für Schleife, die es -1 zurückgeben wird. Wenn das falsch ist, wird der Index ausgedruckt. Wie alle anderen bereits geschrieben haben, hier ist der Code, um den Index zu finden.

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

    return -1; 
} 
+0

Das OP druckt sie auch vor der Rückkehr. –