Vergleich zwischen ein String in ein String Array mit angegebene String

Xching

Erfahrenes Mitglied
Hallo Zusammen, ich weiß es nicht , wie ich anfangen soll, wenn ich den ersten Name liefere, der alphabetisch auf den angegebene Name folgt. ich möchte gern immer nachfolgene String in ein String array mit angegebene String Name vergleichen, wenn es stimmt ,soll Name zurückliefern und liefert null wenn keine gibt.

Java:
/**
		 * Liefert den ersten Name,der alphabetisch auf den angegebenen Namen folgt
		 * @param name
		 * @return
		 */
		public String getNameAfter(String name){
			
		     // lassen die Schleife bis zum Ende Index von String durch
			for(int i = 0; i <= person.length; i++){
		   // Vergleich die nachfolgede String Name in String Array
			// durch jede Schleife i+1 mit String name.
			 if(person[i+1].getName().compareTo(name)!= 0){
				 return null;
			 }else{
			  return person[i].getName();
			 }
			 
			}
			
			return null;
		}
 
Zuletzt bearbeitet:
Drei Sachen fallen mir auf:

Dein Programm wirft sicher ein Fehler in der Konsole "Index out of Bounds..." aus:

Nehmen wir an du hast ein Array mit 7 elemente.

Dh deine Schleife soll, um alle Elemente abzutasten von 0 - 6 gehen.
1. Deine läuft von 0 - 7
Java:
(int i = 0; i <= person.length; i++)
2. Nach dem letzten durchlauf rufst du den index 7 + 1 im array auf
Java:
(person[i+1].getName().compareTo(name)!= 0)
3. Wenn du auf ungleich prüfen wills kannste auch .equals verwenden mit "!" davr
Java:
if(!person[i+1].getName().equals(name))
 
Zuletzt bearbeitet:
Das 3. ist falsch. CompareTo liefert einen Integer zurück.
< 0 für kleiner
= 0 für gleich
> 0 für größer

Damit muss das schon auf != 0 geprüft werden.
 
Hi,

wenn du den Namen haben willst, der auf das übergebene Element folgt, musst du in der Schleife das aktuelle Element überprüfen und bei Gleichheit das nächste Element zurückgeben, nicht das nächste Element überprüfen und das aktuelle zurückgeben. Mit deinem Code lieferst du das Element zurück, welches vor dem übergebenen Element ist.

Bei Ungleichheit in einem Schleifendurchlauf nicht null zurückgeben, sondern den nächsten Schleifendurchlauf machen.

Wenn das letzte Element im Array übereinstimmt, müsstest du noch ein sinnvolles Verhalten implementieren, dass es kein Fehler gibt.

Am besten direkt ausführbaren Code mit Testmöglichkeit posten.
Z.B.:
Java:
import java.util.ArrayList;
import java.util.List;

public class PersonFinder {
	private Person[] person;

	public String getNameAfter(String name) {
		for (int i = 0; i < person.length; i++) {
			if (person[i].getName().compareTo(name) == 0) {
				return person[i + 1].getName();
			}
		}
		return null;
	}

	class Person {
		public Person(String name) {
			this.name = name;
		}
		private String name;
		public String getName() {
			return name;
		}
	}

	public static void main(String[] args) {
		PersonFinder personFinder = new PersonFinder();
		List<Person> pList = new ArrayList<Person>();
		pList.add(personFinder.new Person("Aaa"));
		pList.add(personFinder.new Person("Ddd"));
		pList.add(personFinder.new Person("Bbb"));
		pList.add(personFinder.new Person("Ccc"));
		personFinder.setPerson(pList.toArray(new Person[pList.size()]));
		System.out.println(personFinder.getNameAfter("Ddd"));
		System.out.println(personFinder.getNameAfter("Ccc"));
	}

	public Person[] getPerson() {
		return person;
	}

	public void setPerson(Person[] person) {
		this.person = person;
	}
}
 
Zurück