Aiuto esercizio Java

di il
14 risposte

Aiuto esercizio Java

Buongiorno mi chiamo Matteo avrei bisogno del vostro aiuto riguardo un esercizio di Java che mi è stato assegnato.
Dovrei memorizzare le informazioni dei clienti di un albero (cognome, nome, città, numero di telefono).
Realizzare la classe Cliente di attributi e metodi(costruttori, set get, inserimento dell'input, visualizzazione)
Realizzare un programma che permetta
L'inserimento delle informazioni di N clienti
La visualizzazione delle informazioni dei clienti inseriti
La visualizzazione del cognome nome dei clienti di un città inserita dall' input
La visualizzazione del numero di telefono di un cliente dato il cognome e nome inseriti dall' input
La visualizzazione dei clienti in ordine alfabetico

Ho già provato a scrivere il codice ma non riesco a trovare una soluzione che valga per le informazioni richieste, potreste aiutarmi?
Grazie
Matteo

14 Risposte

  • Re: Aiuto esercizio Java

    Ciao, come avrai letto prima di postare, qui non si svolgono esercizi conto terzi. No pappa pronta.
    Posta invece il tuo codice e ne potrai discutere.
  • Re: Aiuto esercizio Java

    Ecco qui, scusate
    import java.util.Scanner;
    import java.util.Arrays;

    public class Main{
    public static void main(String[] args)
    {

    String pers[] = {"cognome", "nome"};
    String mem[] = {"citta","telefono"};
    int n, cli;
    String city, c;

    Scanner scan = new Scanner(System.in);
    System.out.println("Numero clienti: ");
    n = scan.nextInt();

    for(cli = 0; cli < n; cli++)
    {
    Scanner info = new Scanner(System.in);
    System.out.println("Inserisci cognome: ");
    pers[0] = info.nextLine();
    //System.out.println(cognome);

    System.out.println("Inserisci nome: ");
    pers[1] = info.nextLine();
    //System.out.println(nome);

    System.out.println("Inserisci città: ");
    mem[0] = info.nextLine();
    //System.out.println(citta);

    System.out.println("Inserisci numero di cellulare: ");
    mem[1] = info.nextLine();
    //System.out.println(telefono);

    System.out.println("Cognome: " + pers[0]);
    System.out.println("Nome: " + pers[1]);
    System.out.println("Città: " + mem[0]);
    System.out.println("Telefono: " + mem[1]);
    System.out.println();
    }

    Scanner ci = new Scanner(System.in);
    System.out.println("Inserisci una città per cercare una persona: ");
    c = ci.nextLine();
    if(c.equals(mem[0]))
    {
    System.out.println(pers[0]);
    System.out.println(pers[1]);
    System.out.println();
    }

    Scanner te = new Scanner(System.in);
    System.out.println("Inserisci un numero per cercare una persona:");

    city = te.nextLine();
    if(city.equals(mem[1]))
    {
    System.out.println(pers[0]);
    System.out.println(pers[1]);
    }
    Arrays.sort(pers, String.CASE_INSENSITIVE_ORDER);
    for (int a = 0; a < pers.length; a++) {
    System.out.println(pers[a]);
    }
    }
    }

    Ps: sono all'inizio e probabilmente questa non è la via giusta:(
  • Re: Aiuto esercizio Java

    Gallo237 ha scritto:


    Ps: sono all'inizio e probabilmente questa non è la via giusta:(
    No, non è giusta infatti. Innanzitutto è bene che ci sia un solo oggetto Scanner connesso a System.in. Detto in altre parole, non ha senso (e non va bene) fare new Scanner(System.in) in molti punti, ad ogni ciclo, ecc... Ne basta uno solo, creato generalmente all'inizio.

    Poi comunque il testo dell'esercizio dice chiaramente: Realizzare la classe Cliente di attributi e metodi(costruttori, set get, inserimento dell'input, visualizzazione)

    Quei due array non hanno proprio senso di esistere.
    String pers[] = {"cognome", "nome"};
    String mem[] = {"citta","telefono"};
    Quindi devi prima creare una classe Cliente che "modella" un singolo cliente. Non sono molto d'accordo sul fatto che Cliente si debba anche occupare dell'input, perché dovrebbe focalizzarsi solo sul rappresentare logicamente un cliente ... non fare altre logiche.
  • Re: Aiuto esercizio Java

    Ti ringrazio della risposta,
    public class Cliente
    {
    private String cognome;
    private String nome;
    private String citta;
    private String telefono;

    public Cliente(String cog, String nom, String city, String tel)
    {
    cognome = cog;
    nome = nom;
    citta = city;
    telefono = tel;
    }

    public String toString()
    {
    return cognome + "," + nome + "," + citta + "," + telefono;
    }

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

    public String getCognome()
    {
    return cognome;
    }

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

    public String getNome()
    {
    return nome;
    }

    public void setCitta(String citta)
    {
    this.citta = citta;
    }

    public String getCitta()
    {
    return citta;
    }

    public void setTelefono(String telefono)
    {
    this.telefono = telefono;
    }

    public String getTelefono()
    {
    return telefono;
    }
    }
    Ho creato la classe cliente, ma ho ancora un dubbio, come faccio ad utilizzare lo scanner per inserire le varie informazioni?
  • Re: Aiuto esercizio Java

    Gallo237 ha scritto:


    public class Cliente
    {
        private String cognome;
        private String nome; 
        private String citta;
        private String telefono;
        
        public Cliente(String cog, String nom, String city, String tel)
            .......
    }
    Classe tecnicamente corretta.

    P.S. generalmente si mette un parametro con lo stesso nome del field, vale per i setter ma tipicamente anche per i costruttori.

    Gallo237 ha scritto:


    come faccio ad utilizzare lo scanner per inserire le varie informazioni?
    1) chiedi quanti clienti si vuole gestire
    2) crei un array Cliente[] della dimensione richiesta
    3) fai un ciclo (for), per ciascun cliente chiedi i dati, crei un oggetto Cliente e lo assegni nell'array all'indice i-esimo.
  • Re: Aiuto esercizio Java

    Sto facendo confusione.
    Io ho creato un file Main.java e un file Cliente.java.

    1) chiedi quanti clienti si vuole gestire:
    import java.util.Scanner;

    public class Main {
    public static void main(String[] args)
    {
    Scanner n = new Scanner(System.in);
    System.out.println("Inserisci il numero di Clienti: ");
    int nClienti = n.nextInt();


    }
    }
    per la "richiesta dei clienti", ho scritto questo, è corretto?

    Gli altri due punti (2-3) devo crearli nel main, giusto?
  • Re: Aiuto esercizio Java

    Gallo237 ha scritto:


    Io ho creato un file Main.java e un file Cliente.java.
    Corretto

    Gallo237 ha scritto:


    per la "richiesta dei clienti", ho scritto questo, è corretto?

    Gallo237 ha scritto:


    Gli altri due punti (2-3) devo crearli nel main, giusto?
    Sì, è meglio.
  • Re: Aiuto esercizio Java

    Sono riuscito a creare l'array ma non riesco a creare l'oggetto cliente e non riesco a capire come faccio a richiedere i dati nel ciclo for.
    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {

    Scanner n = new Scanner(System.in);
    System.out.println("Inserisci il numero di Clienti: ");
    int nClienti = n.nextInt();

    int[] cliente = new int[nClienti];

    //Cliente nuovoCliente = new Cliente(); // errore

    for(int i = 0; i < nClienti; i++)
    {

    }

    }
    }
  • Re: Aiuto esercizio Java

    Gallo237 ha scritto:


    Scanner n = new Scanner(System.in);
    System.out.println("Inserisci il numero di Clienti: ");
    int nClienti = n.nextInt();
    Fin qui ok.

    Ma poi non devi creare array di int (o altro tipo numerico o String). Devi creare un array Cliente[], la sintassi è la stessa che già sai, basta usare Cliente invece di es. int.

    Poi (abbozzato, per far capire):
    for (int i = 0; i < arrayClienti.length; i++) {
        // ....
        String cognome = scanner.nextLine();
        // ....
        String nome = .......
        // ....
        // ....  altri dati
        // ....
        arrayClienti[i] = .... // crei 1 oggetto Cliente con i dati
    }
    P.S.: usa nomi "parlanti", es. scanner per Scanner, non "n"

    P.S.2: attenzione al "mix" tra nextInt() e nextLine() !!!
  • Re: Aiuto esercizio Java

    Buonasera, sono arrivato qui, il problema è che non riesco a scrivere array Cliente in modo corretto, stessa cosa vale per l'oggetto cliente, posso utilizzare un void() o sono completamente fuori strada.

    import java.util.Scanner;

    public class Main
    {
    public static void main(String[] args)
    {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Inserisci il numero di Clienti: ");
    int nClienti = scanner.nextInt();

    Cliente [] cliente = new Cliente[nClienti];

    for(int i = 0; i < cliente.length; i ++)
    {
    System.out.println("Inserisi Cognome: ");
    String cognome = scanner.nextLine();

    System.out.println("Inserisi nome: ");
    String nome = scanner.nextLine();

    System.out.println("Inserisi Citta: ");
    String citta = scanner.nextLine();

    System.out.println("Inserisi telefono: ");
    String telefono = scanner.nextLine();
    }

    }
    }
  • Re: Aiuto esercizio Java

    Gallo237 ha scritto:


    il problema è che non riesco a scrivere array Cliente in modo corretto
            Cliente [] cliente = new Cliente[nClienti];
    Questo di per sé è corretto. (magari la variabile chiamala clienti)

    Avendo i 4 valori, devi solo creare un oggetto Cliente. Se hai fatto un costruttore che riceve i 4 dati: new Cliente( ....dati.... )
    Da assegnare all'indice i nell'array. Tutto lì.
  • Re: Aiuto esercizio Java

    Ecco fatto,
    import java.util.Scanner;
    import java.util.Arrays;

    public class Main {
    public static void main(String[] args)
    {
    Scanner scanner = new Scanner(System.in);
    System.out.println("inserisci il numero di clienti: ");
    int nclienti = scanner.nextInt();

    Cliente [] clienti = new Cliente [nclienti];

    for(int i = 0; i < clienti.length; i++)
    {
    String cognome = scanner.nextLine();
    System.out.println("Inserisci cognome: ");

    String nome = scanner.nextLine();
    System.out.println("Inserisci nome: ");

    String citta = scanner.nextLine();
    System.out.println("Inserisci citta: ");

    String telefono = scanner.nextLine();
    System.out.println("Inserisci telefono: ");

    clienti = new Cliente(cognome, nome, citta, telefono);
    }

    System.out.println(Arrays.toString(clienti));
    }
    }

    ora funziona, avrei le ultime cose da chiederti, come faccio ad analizzare solo un determinato elemento nell'array, per esempio dovrei far inserire al cliente una città e se l'input è uguale ad un elemento nell'array devo printare il nome e cognome delle persone che corrispondono a quella città.
    Pensavo ad una cosa del genere clienti[2] ma non funziona, oppure con equals to .....
  • Re: Aiuto esercizio Java

    Gallo237 ha scritto:


    Ecco fatto
    Sì, tutto corretto.

    Gallo237 ha scritto:


    come faccio ad analizzare solo un determinato elemento nell'array, per esempio dovrei far inserire al cliente una città e se l'input è uguale ad un elemento nell'array devo printare il nome e cognome delle persone che corrispondono a quella città.
    Pensavo ad una cosa del genere clienti[2] ma non funziona, oppure con equals to .....
    Devi fare un ciclo e cercare in ogni oggetto Cliente il dato o i dati che ti interessano. Fermandoti ovviamente appena trovi il Cliente con quella/e caratteristiche. Ma in tal caso sarebbe meglio cambiare un pochino design e fare una classe apposita che incapsula l'array Cliente[] e fornisce appunto anche i metodi di ricerca.
  • Re: Aiuto esercizio Java

    Va bene, devo creare un altro file, per esempio, "info.java", per la classe oppure posso crearla in Cliente.java
    Per esempio
    public class info
    {
    public info(Cliente[])
    {
    }
    }
Devi accedere o registrarti per scrivere nel forum
14 risposte