Java: Computer soll Zahl erraten?

Hallo, es geht um folgende Aufgabe: Der Spieler soll sich eine Zahl zwischen 1 und 1000 denken. Nun soll der Computer durch geschicktes Fragen innerhalb von 10 Versuchen diese Zahl erraten, natürlich ohne dass der Spieler ihm diese sagt. Meine Idee war, die Menge der möglichen Zahl als Intervall aufzufassen. Der Computer probiert es zunächst einmal mit der Mitte dieses Intervalls (am Anfang wäre es 500, denn 500 liegt genau in der Mitte von 1 und 1000). Dann fragt er den Spieler, ob die Zahl größer oder kleiner ist und passt dementsprechend das Intervall der möglichen Zahlen an, bis eben das Intervall so klein ist, bis er schließlich die richtige Zahl errät. Mit diesem Gedanken habe ich versucht, ein Programm zu schreiben, das aber leider nicht funktioniert und ich finde die Fehler einfach nicht selbst. Über Hilfe / Tipps würde ich mich sehr freuen! Danke!

import java.util.Scanner;
public class Aufgabe16 {
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    // k dient als Zählvariable für die benötigten Versuche
    int k = 0;
    double g1, g2, mitte;
    // g1 ist die linke Grenze des Intervalls, in der die Zahl liegen muss
    g1 = 0;
    // g2 ist die rechte Grenze des Intervalls, in der die Zahl liegen muss
    g2 = 1000;
    // mitte ist die Mitte des Intervalls
    mitte = -1;
    // n als Eingabe des Spielers
    int n = -1;
    System.out.println("Denke dir eine beliebige Zahl zwischen 1 und 1000.");
    
    do {
    // Versuche zählen
    k = k + 1;
    // Mitte des Intervalls berechnen
    mitte = (g2 - g1) / 2;
    System.out.println(mitte);
    System.out.println("Ist die Zahl größer oder kleiner?");
    System.out.println("Drücke 0 für kleiner); 1 für größer; 2 wenn richtig erraten");
    n = input.nextInt();
    
    if (n == 0) {
        // Zahl ist kleiner als die Mitte des Intervalls 
        // also rechte Intervallgrenze anpassen
        g2 = mitte;
    } else {
        if (n == 1) {
            // Zahl ist größer als die Mitte des Intervalls 
            // also linke Intervallgrenze anpassen
            g1 = mitte;
        } else {
            if (n != 2) {
                // Wenn man was anderes als 0, 1, 2 eintippt, kommt Fehlermeldung
                System.out.println("Inkorrekte Eingabe!");
            }
        }
    }
    
// while-Schleife, bis der Spieler 2 drückt (richtig erraten)   
} while (!(n == 2));
    
    input.close();
    System.out.println("Die Zahl wurde erraten. Sie lautet " + mitte + ".");
    System.out.println("Der Computer hat " + k + " Versuche gebraucht.");
    

} }

Computer, programmieren, Java, Zahlen, Code, Informatik
Java: Text einlesen und Häufigkeit der Buchstaben analysieren?

Hey! Ich möchte einen Text einlesen und die Häufigkeit der Buchstaben analysieren. Dazu habe ich folgenden Code geschrieben. Leider ist dort irgendwo ein Logikfehler versteckt, den ich aber nicht finde :( Das Programm tut nicht, was es soll. Es wird für alle Buchstaben die Anzahl 0 ausgegeben, was ja nicht sein kann. Ich wäre sehr dankbar, wenn jemand meinen Denkfehler findet. Dankeschön! P.S: hab erst vor 2 Wochen mit Programmieren angefangen, also verurteilt meinen Code nicht gleich ^^

import java.io.*;

public class Buchstabenstatistik { public static void main(String[] args) throws IOException{

    // Es werden 180 000 Buchstaben des Textes "time" eingelesen und in einem char Array 'buchstaben' gespeichert
    FileReader reader = new FileReader("d:\\time.txt");
    int n1 = 180000;
    char[] buchstaben = new char[n1];
    reader.read(buchstaben);
    reader.close();
    
    // Alle Buchstaben des englischen Alphabets werden in einem char Array 'alphabet' gespeichert
    char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x', 'y', 'z'};
    
    // Es wird ein neues int Array 'counter'angelegt, mit dem später gezählt werden soll, wie oft ein 
    // einzelner Buchstabe im Text vorgekommen ist
    int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
    a = b = c = d = e = f = g = h = i = j = k = l = m = n = o = p = q = r = s = t = u = v = w = x = y = z = 0;
    // Anfangs wird jedem Element des counters der Wert 0 zugewiesen, da ja noch keine Buchstaben gezählt wurden
    int[] counter = {a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z};
    for (int i1 = 0; i1 < counter.length; i1 ++){
        counter[i1] = 0;    
    }
    
    // Jeder Buchstabe im Text (gespeichert im char Array 'buchstaben') wird mit jedem Buchstaben des englischen Alphabets
    // verglichen. Wenn sie übereinstimmen, wird der Array 'counter' an der jeweiligen Stelle im Array, der für einen
    // bestimmten Buchstaben steht, um 1 erhöht
    for (int k1 = 0; k < buchstaben.length; k++) {
        for (int k2 = 0; k2 < alphabet.length; k2 ++) {
            if (buchstaben[k1] == alphabet[k2]) {
                counter[k2] = counter[k2] + 1;
            }
        }   
    }
    // Die Anzahl jedes Buchstaben, der im Text vorgekommen ist, wird ausgegeben
    System.out.println("Anzahl der Buchstaben: ");
    for (int k3 = 0; k3 < counter.length; k3 ++) {
        System.out.println(alphabet[k3] + " : " + counter[k3]);
    }
    //Die prozentuale Häufigkeit der Buchstaben soll berechnet und ausgegeben werden
    // (Anzahl des Buchstaben im Text / Anzahl aller Buchstaben im Text) * 100% 
    System.out.println();
    System.out.println("Häufigkeit der Buchstaben in Prozent: ");
    double h1 = 0;
    for (int k4 = 0; k4 < counter.length; k4 ++) {
        h1  = (counter[k4] / n1) * 100;
        System.out.println(alphabet[k4] + " : " + h1 + " % ");
    }

}

}

Computer, IT, programmieren, Java, Code, Informatik, Häufigkeit
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.