Indovina il numero con binary search

di il
1 risposte

Indovina il numero con binary search

Salve, sono bloccato nella risoluzione di questo "giochino", come si puo' intuire dal titolo il giocatore deve pensare un numero da 1 a 1000 e il programma dovra' indovinarlo in 10 tentativi usando l'algoritmo. Avro' sicuramente sbagliato qualcosa all'interno del ciclo do-while, ma purtroppo non riesco a capire cosa manca.
P.S. Inizialmente chiedo al giocatore se il numero e' 500 in modo da eliminare l'altra meta' delle possibilita' in un solo tentativo.
Grazie a chiunque mi risponda.
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		 
		Scanner in = new Scanner(System.in);
		boolean finish = false;
		
		while(!finish) {
			Main main  =  new Main();
			System.out.println("Scrivi 1 per giocare.\n" +
		"Scrivi 2 per uscire.");
			int selection = in.nextInt();
			if (selection == 2) {
				finish = true;
				System.out.println("Arrivederci!");
				break;
			} else {
				if (selection == 1) {
					main.option1();
				}
			}
		}

	}
	
	public void option1() {
		Scanner in = new Scanner(System.in);
		int high = 1000;
		int low = 1;
		int tries = 1;
		int guess = (low + high) / 2;
		
		//Chiedo se il numero e' 500, a meta'
		String risposta = "";
		System.out.println("Il numero che stai pensando e': " + guess + "?");
		System.out.println("Scrivi high o low, oppure se e' corretto scrivi: yes");
		risposta = in.nextLine();
		do {
			if (risposta.equals("low")) { //e' minore di 500
				high = guess - 1;
				guess = (high + low) / 2;
				System.out.println("Il numero che stai pensando e':" + guess + " ?\n" + tries + " tentativi.");
				risposta = in.nextLine();
				tries++;
			} else {
				if (risposta.equals("high")) {
				    high = guess - 1;
					guess = (high + low);
					System.out.println("Il numero che stai pensando e':" + guess + " ?\n" + tries + " tentativi.");
					risposta = in.nextLine();
					tries++;
				}
			}
		} while (!risposta.equals("yes"));	
			System.out.println("Indovinato!!\n" + tries + " tentativi.");
		
	   if (tries >= 10) {
		  System.out.println("10 Tentativi raggiunti!"); 
		   
	   }
	}
}

1 Risposte

  • Re: Indovina il numero con binary search

    Loree7 ha scritto:


    Salve, sono bloccato nella risoluzione di questo "giochino", come si puo' intuire dal titolo il giocatore deve pensare un numero da 1 a 1000 e il programma dovra' indovinarlo in 10 tentativi usando l'algoritmo. Avro' sicuramente sbagliato qualcosa all'interno del ciclo do-while, ma purtroppo non riesco a capire cosa manca.
    Una cosa abbastanza evidente è che nel ciclo NON fai un controllo per vedere se i tentativi sono esauriti.
    Il ciclo dovrebbe ripetersi solo se: non è "yes" E ci sono ancora tentativi possibili.

    Un altro errore evidente è che quando si risponde high tu dovresti aggiornare low (non high come stai facendo). E attenzione che nel "high" non hai diviso per 2 !
Devi accedere o registrarti per scrivere nel forum
1 risposte