|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
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;
}
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 22:42. |
|
|
|
|
|
#2 |
|
Senior Member
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;
}
Codice:
if(consExt!='A'&&consExt!='E'&&consExt!='I'&&consExt!='O'&&consExt!='U'&&consExt!='a'&&consExt!='e'&&consExt!='i'&&consExt!='o'&&consExt!='u') Codice:
for(int i = 0; i < cognome.length(); i++) {
if(cognome.charAt(i) != 'A' && /* . . . . */)
consonantiEstratte += cognome.charAt(i);
if(consonantiEstratte.length() == 3)
break;
}
Codice:
for(int i = 0; i < cognome.length() && consonantiEstratte.length() < 3; i++)
if(cognome.charAt(i) != 'A' && /* . . . . */)
consonantiEstratte += cognome.charAt(i);
|
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Feb 2009
Messaggi: 53
|
Ti ringrazio infinitamente per avermi risposto! Soprattutto a quell'orario... Per quanto riguarda:
Quote:
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! |
|
|
|
|
|
|
#4 |
|
Member
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;
}
__________________
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! |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
Codice:
if(consonantiEstratte.length()==3)
break;
|
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Feb 2009
Messaggi: 53
|
Quote:
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! |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
|
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Feb 2009
Messaggi: 53
|
IO devo ancora mangiare...
__________________
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! |
|
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
Quote:
Quote:
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 16:59. |
||
|
|
|
|
|
#10 | ||
|
Member
Iscritto dal: Feb 2009
Messaggi: 53
|
Quote:
Quote:
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! |
||
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
io avrei fatto un semplice loop
Codice:
for (int i=0; i<3; i++)
{
codiceParziale += estraiProssimaConsonante(cognome);
}
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 13:20. |
|
|
|
|
|
#12 |
|
Member
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! |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
inb4IndexOutOfBoundsException
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
|
di nulla a presto
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 21:53. |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
|
ammetto di non aver letto nient'altro che il post 11
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:23.




















