import java.util.*; //importeren van java.util_x000D_
import java.io.*; //importeren van java.io_x000D_
_x000D_
public class Phonebook {_x000D_
	Vector <Person> people;_x000D_
	int n; //class variable omdat het niet in de methode zelf mocht voor recursie_x000D_
	_x000D_
	public Phonebook(String file) {_x000D_
		people = new Vector <Person> ();_x000D_
		read(file);_x000D_
	}_x000D_
	_x000D_
	public void read (String file) {//begin functie inlezen bestand_x000D_
		try {//try catch voor fouten_x000D_
	      File bestandnaam = new File(file); //bestandsnaam doorgeven_x000D_
	      Scanner lezer = new Scanner(bestandnaam); //scanner voor het inlezen van het bestand_x000D_
	      while (lezer.hasNextLine()) {//while loop om door alle regels in het bestand te gaan_x000D_
	        String data = lezer.nextLine(); //volgende line in het bestand  _x000D_
	        StringTokenizer st = new StringTokenizer(data, ",");//naam los van de nummers maken in tokenizer_x000D_
	        Person L = new Person(st.nextToken(), st.nextToken());//object L aanmaken en de naam en het nummer erin invoegen _x000D_
	        people.add(L); //naam toevoegen aan vector_x000D_
	      }_x000D_
	      lezer.close();_x000D_
	    } catch (Exception error) {// als er een fout gevonden is_x000D_
	      System.out.println("Fout gevonden.");_x000D_
	      error.printStackTrace();_x000D_
	    }_x000D_
	}_x000D_
	_x000D_
	public String toString() {_x000D_
		String allesin1 = ""; //lege string die gevuld wordt met de namen en nummers_x000D_
		for (Person L: people) {//loop om door alle people te gaan_x000D_
			 //printen van name en number in de vector die onderdeel zijn van class Person_x000D_
			allesin1 = allesin1 + L.name + " " + L.number + "\n";_x000D_
			}_x000D_
		return allesin1; //returnen van de string met alles erin	_x000D_
	}_x000D_
	_x000D_
	public String number(String name) {_x000D_
		for (Person L: people) {//loop om door alle people te gaan_x000D_
			if (name.equals(L.name)) {_x000D_
				return L.name + " " + L.number;_x000D_
			}_x000D_
		}_x000D_
		return "Geen overeenkomsten gevonden."; //als er geen overeenkomsten zijn_x000D_
			_x000D_
		_x000D_
	}_x000D_
	_x000D_
public void sort(){_x000D_
		n = people.size();_x000D_
		people = sort(people);//eerste aanroep recursie_x000D_
		_x000D_
		_x000D_
	}_x000D_
	private Vector <Person> sort (Vector <Person> tosort) {_x000D_
_x000D_
		//Bubblesort base case_x000D_
		if (n == 1) {_x000D_
			return tosort;_x000D_
		}//body_x000D_
		int count = 0; //zodat de recursie niet onnodig in wordt gegaan_x000D_
		for (int i = 0; i < n-1; i++) {_x000D_
			Person P = tosort.get(i); //haalt huidige in de vector op_x000D_
			Person L = tosort.get(i+1); // haalt de volgende in de vector op_x000D_
			String s2 = P.name; //zet type person om in string name_x000D_
			String s1 = L.name; //zet type person om in string name_x000D_
			if (isSmaller(s1, s2)) { //isSmaller om te vergelijken of s1 kleiner is dan s2			   _x000D_
                tosort.set(i, L); // draait de namen om_x000D_
                tosort.set(i + 1, P);_x000D_
                count = count +1;_x000D_
			}_x000D_
		}_x000D_
		if (count == 0) {_x000D_
			return tosort;_x000D_
		}_x000D_
		n = n-1;_x000D_
		return sort(tosort);// recursie_x000D_
	}_x000D_
	private boolean isSmaller (String s1, String s2) {_x000D_
	// returns true if s1 <s2 alphabetically_x000D_
_x000D_
		boolean builtdifferent = false; //boolean voor de while loop_x000D_
		boolean iskleiner = false; //boolean voor als s1 kleiner is dan s2 dus s2 bovenaan moet zijn_x000D_
		int i = 0;//teller om de letters te vergelijken op pos i in de string_x000D_
		while (!builtdifferent) {//while loop die doorgaat tot er een verschil is tussen de 2 strings_x000D_
			if (s1.toLowerCase().charAt(i) != s2.toLowerCase().charAt(i)) {_x000D_
				if ((int)s1.toLowerCase().charAt(i) < (int)s2.toLowerCase().charAt(i)) {// hoe lager getal hoe eerder alfabet_x000D_
					iskleiner = true; //als s1 kleiner is dan s2_x000D_
				}_x000D_
				builtdifferent = true; //voor het eindigen van de while loop_x000D_
				_x000D_
			}else {_x000D_
				i++; //om door te gaan naar het volgende character van de string_x000D_
			}_x000D_
		}_x000D_
		return iskleiner;_x000D_
	_x000D_
	}_x000D_
}_x000D_

//zet type person om in string name_x000D_
import java.util.*; //importeren van java.util_x000D_
import java.io.*; //importeren van java.io_x000D_
_x000D_
public class Phonebook {_x000D_
	Vector <Person> people;_x000D_
	int n; //class variable omdat het niet in de methode zelf mocht voor recursie_x000D_
	_x000D_
	public Phonebook(String file) {_x000D_
		people = new Vector <Person> ();_x000D_
		read(file);_x000D_
	}_x000D_
	_x000D_
	public void read (String file) {//begin functie inlezen bestand_x000D_
		try {//try catch voor fouten_x000D_
	      File bestandnaam = new File(file); //bestandsnaam doorgeven_x000D_
	      Scanner lezer = new Scanner(bestandnaam); //scanner voor het inlezen van het bestand_x000D_
	      while (lezer.hasNextLine()) {//while loop om door alle regels in het bestand te gaan_x000D_
	        String data = lezer.nextLine(); //volgende line in het bestand  _x000D_
	        StringTokenizer st = new StringTokenizer(data, ",");//naam los van de nummers maken in tokenizer_x000D_
	        Person L = new Person(st.nextToken(), st.nextToken());//object L aanmaken en de naam en het nummer erin invoegen _x000D_
	        people.add(L); //naam toevoegen aan vector_x000D_
	      }_x000D_
	      lezer.close();_x000D_
	    } catch (Exception error) {// als er een fout gevonden is_x000D_
	      System.out.println("Fout gevonden.");_x000D_
	      error.printStackTrace();_x000D_
	    }_x000D_
	}_x000D_
	_x000D_
	public String toString() {_x000D_
		String allesin1 = ""; //lege string die gevuld wordt met de namen en nummers_x000D_
		for (Person L: people) {//loop om door alle people te gaan_x000D_
			 //printen van name en number in de vector die onderdeel zijn van class Person_x000D_
			allesin1 = allesin1 + L.name + " " + L.number + "\n";_x000D_
			}_x000D_
		return allesin1; //returnen van de string met alles erin	_x000D_
	}_x000D_
	_x000D_
	public String number(String name) {_x000D_
		for (Person L: people) {//loop om door alle people te gaan_x000D_
			if (name.equals(L.name)) {_x000D_
				return L.name + " " + L.number;_x000D_
			}_x000D_
		}_x000D_
		return "Geen overeenkomsten gevonden."; //als er geen overeenkomsten zijn_x000D_
			_x000D_
		_x000D_
	}_x000D_
	_x000D_
public void sort(){_x000D_
		n = people.size();_x000D_
		people = sort(people);//eerste aanroep recursie_x000D_
		_x000D_
		_x000D_
	}_x000D_
	private Vector <Person> sort (Vector <Person> tosort) {_x000D_
_x000D_
		//Bubblesort base case_x000D_
		if (n == 1) {_x000D_
			return tosort;_x000D_
		}//body_x000D_
		int count = 0; //zodat de recursie niet onnodig in wordt gegaan_x000D_
		for (int i = 0; i < n-1; i++) {_x000D_
			Person P = tosort.get(i); //haalt huidige in de vector op_x000D_
			Person L = tosort.get(i+1); // haalt de volgende in de vector op_x000D_
			String s2 = P.name; //zet type person om in string name_x000D_
			String s1 = L.name; //zet type<SUF>
			if (isSmaller(s1, s2)) { //isSmaller om te vergelijken of s1 kleiner is dan s2			   _x000D_
                tosort.set(i, L); // draait de namen om_x000D_
                tosort.set(i + 1, P);_x000D_
                count = count +1;_x000D_
			}_x000D_
		}_x000D_
		if (count == 0) {_x000D_
			return tosort;_x000D_
		}_x000D_
		n = n-1;_x000D_
		return sort(tosort);// recursie_x000D_
	}_x000D_
	private boolean isSmaller (String s1, String s2) {_x000D_
	// returns true if s1 <s2 alphabetically_x000D_
_x000D_
		boolean builtdifferent = false; //boolean voor de while loop_x000D_
		boolean iskleiner = false; //boolean voor als s1 kleiner is dan s2 dus s2 bovenaan moet zijn_x000D_
		int i = 0;//teller om de letters te vergelijken op pos i in de string_x000D_
		while (!builtdifferent) {//while loop die doorgaat tot er een verschil is tussen de 2 strings_x000D_
			if (s1.toLowerCase().charAt(i) != s2.toLowerCase().charAt(i)) {_x000D_
				if ((int)s1.toLowerCase().charAt(i) < (int)s2.toLowerCase().charAt(i)) {// hoe lager getal hoe eerder alfabet_x000D_
					iskleiner = true; //als s1 kleiner is dan s2_x000D_
				}_x000D_
				builtdifferent = true; //voor het eindigen van de while loop_x000D_
				_x000D_
			}else {_x000D_
				i++; //om door te gaan naar het volgende character van de string_x000D_
			}_x000D_
		}_x000D_
		return iskleiner;_x000D_
	_x000D_
	}_x000D_
}_x000D_
