RISOLTO Problema in Java

Stato
Discussione chiusa ad ulteriori risposte.

Gabbanis

Nuovo Utente
101
2
Buongiorno/Buona serata a tutti io ho un problema con un esercizio in Java (sono ancora alle prime armi ) :

  1. (classe astratta) Persona: identifica un generica persona che fa parte dello staff della società sportiva. Ogni persona è descritta dalle seguenti caratteristiche: codice fiscale, nome, cognome, data di nascita. o Sul campo codice fiscale definire una regola che permetta di validarne il formato:
  •  lunghezza fissa pari a 16 caratteri;
    •  formato del tipo LLLLLLNNLNNLNNNL , in cui L = Lettera ed N = numero.
  1. Allenatore: è una specifica persona che svolge il ruolo di allenatore. Di ogni allenatore occorre catalogare l’anno di inizio attività (il valore inserito non può essere superiore all’anno corrente);
  2.  Calciatore: è uno specifico atleta. Di ogni calciatore, occorre catalogare il ruolo in cui gioca. Il ruolo può essere uno tra: Portiere, Difensore, Centrocampista, Attaccante.

La mia Domanda è :
  1. come faccio a fare la parte del codice fiscale in base a quanto richiesto nel problema? (mi potete dare una mano :suicidio: )
  2. stessa cosa nell'allenatore come fare la parte dell anno di inizio attività
  3. per il calciatore basta fare una classe enum ? che poi richiamerò nel file (es: Calciatore.Java)
  4. Qualche consiglio su un sito che fornisce esercizi e teoria per imparare la programmazione java?
Riporto il codice che ho fatto per adesso della Persona:
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package af_societasportiva;

/**
*
* @author Christian
*/
public abstract class Persona {
    protected String nome;
    protected String cognome;
    protected String nascita;
    protected String codiceFiscale;

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String Cognome) {
        this.cognome = Cognome;
    }

    public String getNascita() {
        return nascita;
    }

    public void setNascita(String nascita) {
        this.nascita = nascita;
    }
  
    public String setCodiceFiscale() {
            if(codiceFiscale.length()==16){
                this.codiceFiscale= codiceFiscale;
            }
    else{
                   System.out.println("Errore");
                  
}       return null;
}

    public String getCodiceFiscale() {

                return codiceFiscale;
            }


    public void setCodiceFiscale(String codiceFiscale) {
               this.codiceFiscale=codiceFiscale;

    }
  
    public Persona(String nome, String cognome,String codiceFiscale,String nascita)
    {
        this.cognome = cognome;
        this.nome = nome;
        this.codiceFiscale=codiceFiscale;
        this.nascita=nascita;

    }
        public String toString()
    {
        return nome+" "+cognome+" "+nascita+" "+codiceFiscale;
              
    }
  
  
}

      
    public void setCodiceFiscale(String codiceFiscale) {
               this.codiceFiscale=codiceFiscale;

    }
  
    public Persona(String nome, String cognome,String codiceFiscale,String nascita)
    {
        this.cognome = cognome;
        this.nome = nome;
        this.codiceFiscale=codiceFiscale;
        this.nascita=nascita;

    }
        public String toString()
    {
        return nome+" "+cognome+" "+nascita+" "+codiceFiscale;
              
    }
  

  
}
Grazie in anticipo
 
Ultima modifica da un moderatore:

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Una data di nascita non è una stringa, ma una... data! Usa una delle classi apposite predefinite in Java;
1.
per quanto riguarda il codice fiscale, validare il formato significa semplicemente controllare che i primi 6 caratteri siano lettere (maiuscole), seguite da 2 cifre, seguite da una lettera (maiusc.), seguita da 2 cifre ecc. ecc.: Java ha metodi appositi (nella classe Character) per verificare se un carattere è una lettera ( isLetter(carattere) )o una cifra ( isDigit(carattere) ); in alternativa si possono usare le espressioni regolari.
2.
Allenatore è una classe derivata da Persona ed avrà un campo/attributo per l'anno di inizio attività (anche qui sarebbe corretta una data);
3.
Calciatore è una classe derivata da Persona ed avrà un campo/attributo enum per definirne il ruolo (enum va definita a parte)
4.
meglio un libro serio (e gratuito): https://math.hws.edu/javanotes/
contiene sia teoria che esercizi a fine capitoli. In fondo alla pafina c'è il download della versione in PDF
 

Gabbanis

Nuovo Utente
101
2
Una data di nascita non è una stringa, ma una... data! Usa una delle classi apposite predefinite in Java;
1.
per quanto riguarda il codice fiscale, validare il formato significa semplicemente controllare che i primi 6 caratteri siano lettere (maiuscole), seguite da 2 cifre, seguite da una lettera (maiusc.), seguita da 2 cifre ecc. ecc.: Java ha metodi appositi (nella classe Character) per verificare se un carattere è una lettera ( isLetter(carattere) )o una cifra ( isDigit(carattere) ); in alternativa si possono usare le espressioni regolari.
2.
Allenatore è una classe derivata da Persona ed avrà un campo/attributo per l'anno di inizio attività (anche qui sarebbe corretta una data);
3.
Calciatore è una classe derivata da Persona ed avrà un campo/attributo enum per definirne il ruolo (enum va definita a parte)
4.
meglio un libro serio (e gratuito): https://math.hws.edu/javanotes/
contiene sia teoria che esercizi a fine capitoli. In fondo alla pafina c'è il download della versione in PDF
ma il codice per fare i controlli del codice fiscale devo metterli all'interno de set oppure fare una funzione a parte?
 

Moffetta88

Moderatore
Staff Forum
Utente Èlite
20,551
12,942
CPU
i5-4690
Dissipatore
DEEPCOOL CAPTAIN 240EX
Scheda Madre
MSI Z97 U3 PLUS
HDD
KINGSTON SSD KC400 240GB
RAM
24GB BALLISTIX SPORT @2133MHz
GPU
STRIX GTX980 DC2OC
Audio
INTEGRATA
Monitor
AOC G2590VXQ
PSU
BEQUIET! System Power 7 500W
Case
DEEPCOOL MATREXX 55
Periferiche
NESSUNA
Net
EOLO 100
OS
UBUNTU/WINDOWS11
Per fare il controllo sul codice fiscale sarebbe opportuno usare una regex e non il controllo carattere per carattere
Pattern regex
Codice:
^[A-Za-z]{6}\d{2}[A-Za-z]\d{2}[A-Za-z]\d{3}[A-Za-z]$
Esempio di controllo:
Esempio di codice con utilizzo regex
Java:
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^[A-Za-z]{6}\\d{2}[A-Za-z]\\d{2}[A-Za-z]\\d{3}[A-Za-z]$";
final String string = "FTNPZT92A15E738I\n"
     + "YDGGMN73M03L018A\n"
     + "CDSZXW93A26L613M\n"
     + "SKRZKW36B29Z730F\n"
     + "SKRZKW36B29Z7304\n"
     + "SKRZKW36B29Z73EF\n"
     + "SKRzkW36B29Z730f";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
infatti è la stessa cosa che avevo detto anch'io dopo aver suggerito il controllo carattere per carattere: "in alternativa si possono usare le espressioni regolari "
solo che non gliel'ho data come prima opzione perché se è alle prime armi probabilmente non le ha ancora studiate...
 
Ultima modifica:

Gabbanis

Nuovo Utente
101
2
[TR][/TR]
infatti è la stessa cosa che avevo detto anch'io dopo aver suggerito il controllo carattere per carattere: "in alternativa si possono usare le espressioni regolari "
solo che non glil'ho data come prima opzione perché se è alle prime armi probabilmente non le ha ancora studiate...
ho risolto tutto ma per prendere la data per esempio dalla libreria Date come posso fare?
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!