Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Motorola razr fold, dalla conchiglia al formato a libro. La recensione
Abbiamo provato Motorola razr fold, il pieghevole a libro con display interno LTPO da 8,09 pollici, Snapdragon 8 Gen 5 e batteria da 6000 mAh in 243 grammi. Pennino e custodia sopno già nella confezione, per un foldable che si caratterizza per il pannello luminoso, l'autonomia ottima per la categoria e le fotocamere coerenti e ben sfruttabili. Il listino è di 1999 euro, ma in vendita si trova già a molto meno
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


HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
Nokia Innovation Day 2026: la sovranità europea passa dal mercato unico e dai laboratori italiani del gruppo Nokia Innovation Day 2026: la sovranità e...
OpenAI, un modello GPT-5.6 Sol ha usato ...
Google testa Ask Google Help: l'IA di Ge...
Apple aggiorna l'elenco dei prodotti obs...
Renault 5 si aggiorna anche in Italia: p...
L’IA fa il lavoro dei junior. Ma le impr...
Google riduce gli errori quantistici di ...
Xpeng Mona L05: un SUV da 4,87 metri con...
CERN e Mistral AI insieme per il primo L...
Le analisi approfondite sullo scudo term...
Chery Q arriva in Italia: 380 km, trazio...
Rocket Lab rinvia il primo lancio di Neu...
Tutti gli astronauti della missione spaz...
Agenti IA in azienda: il difficile non &...
Anthropic, New York chiede di rinviare l...
Meta aggiorna Edits con link audio, tend...
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: 21:10.


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