Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    Trovare il massimo e quante volte compare.

    Salve sono alle prime armi in programmazione, sono da un paio di giorni a cercare di capire come fare un programma che trovi il massimo tra n numeri inseriti in input e dire quante volte compare (tra i numeri inseriti).
    Premetto che non abbiamo fatto array ancora e gli unici costrutti che conosco sono while, if, for, do while insomma quelli di base.

    vi posto il codice da me creato.

    codice:
    import java.util.Scanner;public class Massimo {
    	public static void main(String[] args)
    	{
    		Scanner in = new Scanner(System.in);
    		int num;
    		int max;
    		int count = 0;
    		boolean done = false;
    		while(!done)
    		{
    			System.out.println("Inserisci il numero o premi 'Q' per uscire"); //Visualizza la stringa "Inserisci numero"
    			String input = in.next();                                        // assegna alla variabile input il valore inserito in input
    			if (input.equalsIgnoreCase("Q"))                                 //se il valore inserito in input è q o Q esci dal ciclo
    				done = true;
    			else 
    			{
    				int numeroInserito = Integer.parseInt(input);  //altrimenti il numero appena inserito in input è il massimo
    				num = numeroInserito;
    				max = num;
    				count++;
    				if (numeroInserito > max)
    					max = numeroInserito;
    				System.out.println("il massimo è :" + max);
    				System.out.println("Il numero di massimi trovati e'" + count );
    			}
    		}
    	}
    }
    Il problema che ho è che se inserisco sempre numeri maggiori dei precedenti, il programma mi calcola esattamente quello che voglio, ma se inserisco ad esempio un numero minore del precedente mi dice che quello è il massimo e aggiorna il contatore.
    Il problema l'ho capito ma non riesco a esprimere il confronto tra il numero precedentemente inserito e quello successivo. Come potrei fare?? qualcuno mi può dare una mano a risolverlo senza modificare con altri costrutti particolari questo mio codice??

    Grazie spero di essere stato abbastanza chiaro.
    Ultima modifica di MItaly; 17-11-2013 a 17:25 Motivo: Tag CODE, fix indentazione

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Per il codice si usa il tag CODE o diventa illeggibile...

    Il problema è qua:

    codice:
    int numeroInserito = Integer.parseInt(input);
    num = numeroInserito;
    max = num;
    Ora come ora qualsiasi numero inserisci diventa il massimo e ovviamente non è corretto.
    Il valore di max va aggiornato in due casi:
    1) hai appena inserito il primo numero della sequenza
    2) l'ultimo inserito è effettivamente maggiore del massimo attuale

    Poi non ho capito il perché della variabile num... In generale sì può riscrivere il tutto in modo molto più lineare e pulito.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    si hai ragione, infatti la variabile num l'ho inserita non so per quale motivo. L'ho capito anche io dov'è il problema ma non riesco a fare il confronto tra il numero precedente e il successivo, infatti ho inserito l'if ma è come se non lo esegue proprio.

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quell'if serve a poco visto che numeroInserito e max hanno sempre lo stesso valore...

    Ti serve un banale controllo per capire se si tratta o meno del primo numero che inserisci:

    codice:
    public class Massimo
    {
        public static void main(String[] args)
        {
            java.util.Scanner scanner = new java.util.Scanner(System.in);
    
            int max = 0;
            int count = 0;
            boolean done = false;
            boolean first = true;
    
            while (!done)
            {
                System.out.print("Inserisci un numero ('Q' per uscire): ");
                String input = scanner.next();
    
                if ( input.equalsIgnoreCase("Q") )
                {
                    done = true;
                }
                else
                {
                    int numeroInserito = Integer.parseInt(input);
    
                    if ( first )
                    {
                        max = numeroInserito;
                        first = false;
                    } else if ( numeroInserito > max )
                    {
                        max = numeroInserito;
                        count++;
                    }
                }
            }
    
            System.out.println("Il massimo e\': " + max);
            System.out.println("Il numero di massimi trovati (oltre al primo elemento) e\': " + count);
    
            scanner.close();
        }
    }
    Occhio che comunque ti resta un problema: se l'utente non inserisce 'Q' e non inserisce un numero? Dovresti gestire questo caso o l'applicazione crasha brutalmente
    Ultima modifica di Alex'87; 17-11-2013 a 16:05
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    grazie mille ho modificato il mio codice e ho inserito l'incremento del contatore nel primo caso perchè il primo valore sarà sempre il massimo e quindi il contatore lo segnerà...Se inserisco lettere ovviamente va in crash perchè non ho definito un altro controllo, come si potrebbe fare una cosa del genere? non sono certo di aver fatto un costrutto che mi permette di fare questo controllo, ovviamente si tratti di un IF. L'unica cosa che non so se si potrebbe utilizzare il metodo input.equals() però come parametro ho una stringa non la definizione di un tipo. Inoltre posso scrivere il controllo in qualsiasi parte del codice (all'interno del while) o lo devo definire per forza dopo che ho controllato che la lettera inserita non sia Q o q?

    poi un'altra domanda, riguardo il controllo che hai aggiunto per il primo numero, volevo chiederti, bisogna necessariamente metterlo in quella posizione dove l'hai inserito in modo che il compilatore sa che si tratta del primo numero e sa come comportarsi, invece per tutti gli altri si comporta come descritto nelle successive righe...è così?
    Ultima modifica di applefriend; 17-11-2013 a 16:56

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Devi usare il blocco try-catch:

    codice:
    int numeroInserito = 0;
    try 
    {
        numeroInserito = Integer.parseInt(input);
    }
    catch (Exception ex) 
    {
        System.out.println("Numero non valido!");
        // Salta tutto il resto del ciclo e inizia una nuova iterazione.
        continue;
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    ah grazie, sono costrutti che non abbiamo ancora trattato a lezione. Potresti rispondermi all'ultima domanda che ti ho fatto prima?
    poi un'altra domanda, riguardo il controllo che hai aggiunto per il primo numero, volevo chiederti, bisogna necessariamente metterlo in quella posizione dove l'hai inserito in modo che il compilatore sa che si tratta del primo numero e sa come comportarsi, invece per tutti gli altri si comporta come descritto nelle successive righe...è così?



  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da applefriend Visualizza il messaggio
    poi un'altra domanda, riguardo il controllo che hai aggiunto per il primo numero, volevo chiederti, bisogna necessariamente metterlo in quella posizione dove l'hai inserito in modo che il compilatore sa che si tratta del primo numero e sa come comportarsi, invece per tutti gli altri si comporta come descritto nelle successive righe...è così?
    Intanto non è il compilatore che "sa di cosa si tratta": il compilatore compila e basta, non gliene frega niente di quello che scrivi, basta che sia corretto (in caso contrario si incaxxa )

    Tornando alla tua domanda... Devi inserire un numero e se è il primo che inserisci fare certe cose... Non so, dove altro vorresti metterlo quel controllo se non subito dopo che è stato inserito? (oppure non ho ben capito quello che mi stai chiedendo )
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Intanto non è il compilatore che "sa di cosa si tratta": il compilatore compila e basta, non gliene frega niente di quello che scrivi, basta che sia corretto (in caso contrario si incaxxa )

    Tornando alla tua domanda... Devi inserire un numero e se è il primo che inserisci fare certe cose... Non so, dove altro vorresti metterlo quel controllo se non subito dopo che è stato inserito? (oppure non ho ben capito quello che mi stai chiedendo )
    Semplicemente vorrei sapere come fa il compilatore a capire che quello che inserisci è il primo numero? una risposta potrebbe essere che la condizione del primo numero l'hai messa in alto rispetto a tutti gli altri casi? (non so se è chiaro quello che sto dicendo)

    cioè come fa a sapere che deve eseguire il controllo if del primo numero solo una volta? (suppongo per la posizione in cui è stato inserito giusto? se lo metto in un'altra posizione farà la stessa cosa o no?)

    Spero che ora ti sia piu chiaro, scusa per tutte queste domande, ma vorrei capirci di piu...
    Ultima modifica di applefriend; 18-11-2013 a 11:28

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Hai notato la dichiarazione

    codice:
    boolean first = true;
    ?

    La prima volta che entro nel ciclo la variabile sarà ancora true e quindi so che si tratta del primo numero.
    Poi metto a false la variabile e non avrò più il caso "questo è il primo numero che sto inserendo".. Non capisco la tua difficoltà
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.