Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce
REDMI Note 17 Pro porta in fascia media una batteria da 8.340 mAh con ricarica HyperCharge a 67W, un display AMOLED da 6,83 pollici capace di picchi di luminosità molto elevati e una struttura certificata TÜV SÜD contro cadute e infiltrazioni d'acqua, il tutto racchiuso in una scocca da 223 grammi. Lo abbiamo provato per diversi giorni tra fotocamera, prestazioni, autonomia e prezzo sul mercato italiano
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-01-2011, 21:40   #1
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
[Java] Cognome in codice fiscale,dove sbaglio?

Ciao a tutti!
E' da un paio d'ore, che sto sbattendo la testa su questa porzione di codice

Codice:
protected String estraiConsonanti(String cognome){
 do{
                for (int i=0;i<cognome.length();i++){
                    consExt=cognome.charAt(i);
                if(consExt!='A'&&consExt!='E'&&consExt!='I'&&consExt!='O'&&consExt!='U'){
                    consonantiEstratte=consonantiEstratte+consExt;
                    if(consonantiEstratte.length()==3){
                       continua=false;
                    }


                    }
                    }
 }while(continua);
    return consonantiEstratte;
}
In pratica, con il for scorre tutta la parola (lettera per lettera) contenuta in temp (di tipo String, mettiamo il caso che sia il cognome ="Allegato") passata come parametro.
Nella condizione in cui la lunghezza di temp è uguale a 3, dovrebbe modificare la condizione del do-while e pertanto interrompere l'esecuzione delle istruzioni contenute nel do-while.

Come posso risolvere? A me pare fatto bene, ma evidentemente non è così

Grazie mille!
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!

Ultima modifica di Cruain : 07-01-2011 alle 21:42.
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 00:21   #2
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Codice:
protected String estraiConsonanti(String cognome){
 do{
                for (int i=0;i<cognome.length();i++){
                    consExt=cognome.charAt(i);
                if(consExt!='A'&&consExt!='E'&&consExt!='I'&&consExt!='O'&&consExt!='U'){
                    consonantiEstratte=consonantiEstratte+consExt;
                    if(consonantiEstratte.length()==3){
                       continua=false;
                    }


                    }
                    }
 }while(continua);
    return consonantiEstratte;
}
Ad occhio vedo un problemino qui: (Ricorda che 'A' =/= 'a' !)
Codice:
if(consExt!='A'&&consExt!='E'&&consExt!='I'&&consExt!='O'&&consExt!='U'&&consExt!='a'&&consExt!='e'&&consExt!='i'&&consExt!='o'&&consExt!='u')
E poi i cicli sono un po' incasinati...
Codice:
for(int i = 0; i < cognome.length(); i++) {
    if(cognome.charAt(i) != 'A' && /* . . . . */)
        consonantiEstratte += cognome.charAt(i);
    if(consonantiEstratte.length() == 3)
        break;
}
Oppure, sacrificando un po' di leggibilità
Codice:
for(int i = 0; i < cognome.length() && consonantiEstratte.length() < 3; i++)
    if(cognome.charAt(i) != 'A' && /* . . . . */)
        consonantiEstratte += cognome.charAt(i);
p.s. forse ho scritto qualche castroneria, vuoi per l'ora, vuoi perchè non ricordo bene bene la sintassi del java. Nel caso, chiedo perdono
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 09:21   #3
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
Ti ringrazio infinitamente per avermi risposto! Soprattutto a quell'orario... Per quanto riguarda:

Quote:
Originariamente inviato da AngeL) Guarda i messaggi
Ad occhio vedo un problemino qui: (Ricorda che 'A' =/= 'a' !)
Codice:
if(consExt!='A'&&consExt!='E'&&consExt!='I'&&consExt!='O'&&consExt!='U'&&consExt!='a'&&consExt!='e'&&consExt!='i'&&consExt!='o'&&consExt!='u')
In un altro metodo viene trasformato con un toUpperCase(); , quindi direi che vada bene.

Ora sistemo come mi hai detto te. Ti faccio sapere.
Grazie mille ancora!
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 10:15   #4
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
Ho risolto così:
Codice:
protected String estraiConsonanti(String cognome){

            for (int i=0;i<cognome.length();i++){
                    consExt=cognome.charAt(i);
                     if(consExt!='A'&&consExt!='E'&&consExt!='I'&&consExt!='O'&&consExt!='U'){
                    consonantiEstratte=consonantiEstratte+consExt;
                    if(consonantiEstratte.length()==3){
                       i=cognome.length()+1;


}
       }
            
 
    }
            return consonantiEstratte;
    }
Nel caso in cui le consonanti estratte sono 3, allora i assume una lunghezza più grande di 1 rispetto alla "lunghezza" del cognome. Questa condizione è sufficiente a rendere falsa la condizione nel for, è così si interrompe restituendomi solo le 3 consonanti cercate.
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 11:29   #5
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Cruain Guarda i messaggi
Nel caso in cui le consonanti estratte sono 3, allora i assume una lunghezza più grande di 1 rispetto alla "lunghezza" del cognome. Questa condizione è sufficiente a rendere falsa la condizione nel for, è così si interrompe restituendomi solo le 3 consonanti cercate.
Se proprio vuoi fare così, io renderei il codice più leggibile ed elegante con
Codice:
if(consonantiEstratte.length()==3)
    break;
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 11:41   #6
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
Quote:
Originariamente inviato da AngeL) Guarda i messaggi
Se proprio vuoi fare così, io renderei il codice più leggibile ed elegante con
Codice:
if(consonantiEstratte.length()==3)
    break;
Funzioni a meraviglia! Non sapevo si potesse usare il break, dentro all'if

Grazie mille per la risposta e buon Appetito!
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 12:34   #7
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da Cruain Guarda i messaggi
Funzioni a meraviglia! Non sapevo si potesse usare il break, dentro all'if

Grazie mille per la risposta e buon Appetito!
Glad I could help!

p.s. è pericoloso augurarmi buon appetito: per "contorno" ho mangiato 1kg di funghi
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 12:36   #8
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
IO devo ancora mangiare... Ho una fame pazzesca !!
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 15:36   #9
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4747
Quote:
Nel caso in cui le consonanti estratte sono 3, allora i assume una lunghezza più grande di 1 rispetto alla "lunghezza" del cognome. Questa condizione è sufficiente a rendere falsa la condizione nel for, è così si interrompe restituendomi solo le 3 consonanti cercate.
Quote:
Funzioni a meraviglia! Non sapevo si potesse usare il break, dentro all'if

mi spiace dirtelo, ma nel tuo codice hai commesso svariati errori , alcuni contingenti, altri concettuali
- la tua funzione modifica e ritorna un oggetto stringa non definito localmente - ma se si suppone che consonantiEstratte sia un attributo della classe, non ha senso ritornarlo (siccome lo stai già modificando, eventuali altri metodi di classe ne vedono il nuovo valore)
- un if produce una diramazione dipendente da valori di stato o di input che complica il programma nonchè il suo diagramma di flusso (*), quindi si usa per condizioni note solo a runtime ma non a priori, e si evita il più possibile per controlli impliciti - tu lo usi (complicandoti le cose e rendendo meno chiaro il codice - e meno male che è un caso semplice) per verificare a runtime una condizione che in realtà già conosci: per il codice fiscale si devono prendere esattamente 3 lettere per il nome (e 3 per il cognome), quindi il loop di estrazione va fatto non sulla lunghezza della stringa - e senza uscirne con un break - ma semplicemente da 1 a 3
- e d' altra parte per nomi / cognomi brevi o comunque con poche consonanti mi risulta si usino anche le vocali (tu invece non gestisci tale caso, altro errore) ...
considera "Aldo -> LDA": la prima lettera è una vocale, la scarti e passi alla seconda; la seconda è una consonante, la prendi e passi alla terza; la terza è di nuovo una consonante, la prendi e passi alla quarta; la quarta è una vocale, la scarti e passi alla quinta - ma la quinta non esiste quindi devi tornare alla prima, e considerare le vocali invece delle consonanti; ora, la prima è una vocale, la prendi e hai finito
un algoritmo generico dovrebbe poter essere implementato usando l' indice riferito alla stringa di ingresso, incrementato e poi "riavvolto" una volta finite le consonanti, e una flag (oppure l' indice sempre incrementato, usato come i%cognome.length(), e un check i>cognome.length() al posto della flag, ma è meno leggibile)

* azzarderei un altro suggerimento: quando scrivi del codice, prova a immaginare che qualcuno arrivi e ti chieda di mappare tutti i possibili stati e transizioni da cui il tuo programma è costituito, e di dimostrargli formalmente che tutti gli stati vengano correttamente attraversati in base alle condizioni di lavoro - quasi certamente inizierai a scrivere codice di qualità migliore in cui capirai da solo cosa non va, perchè tu per primo vorrai semplificare al massimo ...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name
Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish
Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate

Ultima modifica di jappilas : 08-01-2011 alle 15:59.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 15:47   #10
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
Quote:
Originariamente inviato da jappilas Guarda i messaggi
- un if produce una diramazione dipendente da valori di stato o di input che complica il programma nonchè il suo diagramma di flusso (**), quindi
si usa per condizioni note solo a runtime ma non a priori, e si evita il più possibile per controlli impliciti - tu lo usi (complicandoti le cose e rendendo meno chiaro il codice - e meno male che è un caso semplice) per verificare a runtime una condizione che in realtà già conosci
Forse è meglio uno switch?


Quote:
Originariamente inviato da jappilas Guarda i messaggi
- e d' altra parte per nomi / cognomi brevi o comunque con poche consonanti mi risulta si usino anche le vocali (tu invece non gestisci tale caso, altro errore) ... considera "Aldo -> LDA":
la prima lettera è una vocale, la scarti e passi alla seconda
la seconda è una consonante, la prendi e passi alla terza
la terza è di nuovo una consonante, la prendi e passi alla quarta
la quarta è una vocale, la scarti e passi alla quinta - ma la quinta non esiste quindi devi tornare alla prima, e considerare le vocali invece delle consonanti
ora, la prima è una vocale, la prendi e hai finito
un algoritmo generico dovrebbe poter essere implementato usando l' indice riferito alla stringa di ingresso, incrementato e poi "riavvolto" una volta finite le consonanti, e una flag (oppure l' indice sempre incrementato, usato come i%cognome.length(), e un check i>cognome.length() al posto della flag, ma è meno leggibile)
Questa parte di codice che ho scritto sul forum, è solo una parte di codice della classe che mi genera il cognome. I cognomi brevi e quelli con meno con meno di 3 consonanti, vengono gestiti da un'altra parte

Grazie per i consigli jappilas !
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 17:08   #11
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4747
io avrei fatto un semplice loop
Codice:
        for (int i=0; i<3; i++)
        {           
                codiceParziale += estraiProssimaConsonante(cognome);
        }
esterno, piu' una helper function che esamini il cognome lettera per lettera o che ritorni la successiva consonante, ad esempio (riciclando il controllo originale)
Codice:
    private char estraiProssimaConsonante(String cognome)
    {
        char lettera;
        do
        {
            lettera = cognome.charAt(indice);
            indice++;
        }       
        while (lettera =='A' || lettera == 'E' || lettera =='I' || lettera =='O' || lettera =='U');
        return lettera;
    }

questo approccio anche se un po' verboso, ha in realta' il vantaggio di rendere più gestibile il codice, spezzattandolo in "blocchi di complessità" individuali , e sopratutto di renderlo maggiormente testabile (se io volessi controllare il comportamento del mio programma tramite testcase di Junit in questo modo potrei esaminare sia il ciclo esterno sia le funzioni di estrazione - e l' eventuale gestione dei cognomi corti con ricerca delle vocali, essere aggiunta in secondo tempo partendo da codice scheletro già funzionante, aggiungendo una helper function e poco altro - nell' altro modo, no...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name
Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish
Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate

Ultima modifica di jappilas : 09-01-2011 alle 12:20.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 17:18   #12
Cruain
Member
 
L'Avatar di Cruain
 
Iscritto dal: Feb 2009
Messaggi: 53
Grazie mille per i consigli jappilas! Magari, se riesco pechè non ho molto tempo,provo a darci un'occhitina applicando i tuoi suggerimenti.
Grazie ancora e buona serata!
__________________
HP Compaq 6710b-Intel Core 2 Duo @2,00Ghz-2Gb Ram-Intel X3100 358Mb-HDD Hitachi 120Gb

Ti piace la tecnologia? Smart Tech - Technology is our passion!
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 17:25   #13
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
inb4IndexOutOfBoundsException
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 20:49   #14
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4747
di nulla a presto
Quote:
Originariamente inviato da tuccio` Guarda i messaggi
inb4IndexOutOfBoundsException
mi sembrava chiaro che quel codice fosse solo una "traccia" non da usare così com'è, ma necessitasse comunque di accorgimenti a cui accennavo al post 9 ...
__________________
Jappilas is a character created by a friend for his own comic - I feel honored he allowed me to bear his name
Saber's true name belongs to myth - a Heroic Soul out of legends, fighting in our time to fullfill her only wish
Let her image remind of her story, and of the emotions that flew from my heart when i assisted to her Fate

Ultima modifica di jappilas : 08-01-2011 alle 20:53.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 22:56   #15
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
ammetto di non aver letto nient'altro che il post 11
tuccio` è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Space Pioneer starebbe realizzando un pr...
SpaceX ritirerà ''a breve'' il Fa...
La Luna ha un nuovo cratere di grandi di...
ROG Cronox: ASUS alza l'asticella dei ca...
Lenovo annuncia nuovi sistemi per la vir...
M6 e M5 Ultra, i primi benchmark conferm...
La nuova falla della cybersecurity &egra...
The Blood of Dawnwalker, il sequel potre...
Colpiti i data center Amazon: irrecupera...
Google Wallet, nuova interfaccia in arri...
iPhone Duo, problemi di produzione per i...
Firefox diventa più veloce con PDF e JPE...
WhatsApp, arriva su iOS la nuova scorcia...
Snap presenta Specs: realtà aumentata, c...
SteamOS verso un cambiamento epocale: ar...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v