Visualizzazione dei risultati da 1 a 10 su 20

Discussione: aiuto problema java

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di Nikopol
    Registrato dal
    Jan 2011
    Messaggi
    120
    Oltre quello che ti ha già giustamente detto Alex aggiungerei un paio di cose:
    -cerca di evitare di mischiare i metodi di Scanner che leggono token (next(), nextInt(), etc.) con con nextLine(). I primi leggono solamente il token richiesto lasciando il resto nel buffer (ad esempio se inserisci un numero verrà letto solo il numero e il \n (a capo) rimarrà nel buffer) , questo significa che alla successiva lettura oltre al nuovo input ci sarà ancora qualche carattere della lettura precedente. Se ci fai caso, nel tuo programma, dopo alcuni inserimenti vedrai stampare alcuni caratteri e degli "a capo" dove non ci dovrebbero essere.
    Quindi o ripulisci il buffer dopo ogni lettura fatta con il nextInt() oppure usi sempre nextLine(), il quale legge tutti i caratteri della linea lasciando pulito il buffer, e converti il numero letto come stringa in un intero con Integer.ParseInt(miaStringaCheRappresentaUnNumero).

    -non creare un unico main gigantesco, cerca di suddividere i compiti che il tuo programma deve effettuare in classi/metodi
    Ad esempio devi prendere in input un array di persone quindi crea un metodo/classe che si occupi solo di quello; devi esegure una ricerca binaria su un array di persone quindi crea un metoso/classe che si coocupi di eseguire la ricerca.
    Scrivendo tutto nel main il tutto diventa molto complicato da leggere, modificare e debuggare.

    - questo pezzo di codice potrebbe darti problemi nel caso il numero di elementi di array sia elevato:
    codice:
     media = (inf + sup) / 2;
    tenendo presente che inf e sup sono due variabili di tipo int, potrebbe darsi che per un array molto grande la somma tra i due diventi più grande di quella che un int può contenere , generando così un overflow. Ma se sup e inf sono contenuti in un int allora il risultato della loro somma divisa per due è certamente contenibile in un int.
    Si può aggirare il problema lasciando andare in overflow la somma e correggendo la divisione per 2 usando uno schift binario con zero-extension; ovvero
    codice:
    media = (inf + sup)  >>> 1;

    Detto questo l'errore del tuo programma si trova nella ricerca binaria:
    devi trovare l'indice medio della porzione di array che stai esaminando, se l'elemento che si trova nell'indice medio è maggiore dell'elemento cercato allora devi considerare la porzione di array da inf a medio -1, se invece e maggiore devi considerare la porzione da mid a inf.
    Tu fai esattamente l'opposto

    Inoltre ti sarebbe comodo salvare l'indice dell'array della persona trovata (o non trovata) durante la ricerca binaria per poterla stampare alla fine del programma.
    Tu invece qui fai:
    codice:
                             if (trovato == true) {
                                 int j;
                                 System.out.println("codice fiscale trovato" + Arranag[j].Codicefiscale);
                             } else {
                                 System.out.println("codice fiscale non trovato");
                             }
    ma quel j lo usi senza inizializzarlo.
    Ultima modifica di Nikopol; 22-10-2015 a 02:27
    La Guida Galattica è infallibile.
    È la realtà, spesso, ad essere inesatta.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    49
    Scusami io sono alla prime armi ma non ho capito cosa devo aggiustare.Potresti farmi vedere cosa devo aggiungere o togliere

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 © 2025 vBulletin Solutions, Inc. All rights reserved.