Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando
Abbiamo giocato a lungo a Battlefield 6, abbiamo provato tutte le modalità multiplayer, Redsec, e le numerose personalizzazioni. In sintesi, ci siamo concentrati su ogni aspetto del titolo per comprendere al meglio uno degli FPS più ambiziosi della storia dei videogiochi e, dopo quasi due mesi, abbiamo tirato le somme. In questo articolo, condividiamo con voi tutto ciò che è Battlefield 6, un gioco che, a nostro avviso, rappresenta esattamente ciò che questo genere attendeva da tempo
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-01-2011, 22: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 22:42.
Cruain è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 01: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, 10: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, 11: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, 12: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, 12: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, 13: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, 13: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, 16:36   #9
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
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 16:59.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 16: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, 18:08   #11
jappilas
Senior Member
 
L'Avatar di jappilas
 
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);
        }
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 13:20.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 18: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, 18: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, 21:49   #14
jappilas
Senior Member
 
L'Avatar di jappilas
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 4739
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 21:53.
jappilas è offline   Rispondi citando il messaggio o parte di esso
Old 08-01-2011, 23: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


Due mesi di Battlefield 6: dalla campagna al battle royale, è l'FPS che stavamo aspettando Due mesi di Battlefield 6: dalla campagna al bat...
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
La ricarica wireless dei Samsung Galaxy ...
Stop ai social per gli Under 16: l'Austr...
Google svela i videogiochi più ce...
TikTok lancia il nuovo feed con contenut...
Amazon aggiorna gli sconti e si prepara ...
GeForce NOW: 50% di sconto e 30 nuovi gi...
Insta360 Ace Pro 2 in offerta: disponibi...
Roborock Saros 10R a 909€ invece di 1.39...
Solo oggi due monitor Acer a prezzi assu...
FRITZ!Box in forte sconto su Amazon: mod...
Apple + Samsung = monopolio totale nel Q...
6 TV 4K in super sconto su Amazon, anche...
Lava, aspira a 9000Pa e ha la stazione d...
Il nuovo OnePlus 15R avrà una bat...
SpaceX: capitalizzazione di 800 miliardi...
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: 14:23.


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