Zahlen raten

ist der Code jetzt gut? mir bleibt trotzdem Rätsel, warum in der do reingekommen ist, nachdem die zahl erraten wurde

public class ZahlenRaten {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int unteregrenze, oberegrenze, zufall, eingabe, zaeler = 0;

		unteregrenze = sc.nextInt();
		oberegrenze = sc.nextInt();

		zufall = (int) (Math.random() * (oberegrenze - unteregrenze) + unteregrenze);

		do {
			zaeler++;
			System.out.println("N " + zaeler + " Geben Sie die zahl ein");
			eingabe = sc.nextInt();
			int mitte = (oberegrenze - unteregrenze) / 2 + unteregrenze;
			if (eingabe < unteregrenze || eingabe > oberegrenze) {
				System.out.println(String.format(
						"Bitte geben die die Zahl zwischen %s und %s ein ", unteregrenze,
						oberegrenze));
			} else {
				if (zufall > mitte) {

					unteregrenze = mitte;
					System.out.println(String.format(
							"Zahl zwischen %s und %s eingeben", unteregrenze,
							oberegrenze));
				} else {
					if (zufall < mitte) {

						oberegrenze = mitte;

						System.out.println(String.format(
								"Zahl zwischen %s und %s eingeben",
								unteregrenze, oberegrenze));
					} else {
						System.out.println(String.format(
								"Sie haben die zahl beim %s Versuch erraten",
								zaeler));

					}
				}
			}
		} while (eingabe != zufall);

	}

}