Testo

Scrivere una classe Televisore per descrivere gli articoli di un catalogo di televisori che avranno per attributi marca, modello e dimensione. Prevedete un costruttore senza parametri che inizializza tutti gli attributi a opportuni valori di default, un metodo interattivo per settare tutti gli attributi, un metodo toString e metodi set e get. Lanciate un’eccezione quando si prova ad assegnare a un attributo un valore non valido.

Svolgimento

Nella prima parte viene richiesta una classe chiamata Televisore con attributi marca,  modello e dimensione.

public class Televisore{
    private String marca, modello;
    private int dimensione;

}

Creiamo un file chiamato “Televisore.java” e scriviamo al suo interno una semplice classe chiamata Televisore con 3 attributi privati, i primi due di tipo Stringa (marca e modello) e il terzo (dimensione) di tipo intero.


Successivamente viene richiesto un costruttore senza parametri, ovvero il metodo che viene chiamato quando si crea un nuovo oggetto della classe.

public class Televisore{
    private String marca, modello;
    private int dimensione;

    public Televisore(){
        setMarca("Default");
        setModello("Default");
        setDimensione(32);
    }
}

Inseriamo un costruttore senza alcun parametro tra le parentesi tonde e al suo interno mettiamo i tre metodi Set per i tre attributi passando dei parametri scelti da noi che saranno quelli di Default. Anche se ancora non abbiamo definito e implementato questi tre metodi set li inseriamo fin da subito e li definiremo in un secondo momento.


Poi viene richiesto un metodo interattivo per settare tutti gli attributi della classe che abbiamo precedentemente creato (marca, modello e dimensione).

import java.util.Scanner;

public class Televisore{
    private String marca, modello;
    private int dimensione;

    public Televisore(){
        setMarca("Default");
        setModello("Default");
        setDimensione(32);
    }

    public void setValues(){
        Scanner sc = new Scanner(System.in);
        System.out.println("Marca: ");
        setMarca(sc.nextLine());
        System.out.println("Modello: ");
        setModello(sc.nextLine());
        System.out.println("Dimensione: ");
        setDimensione(sc.nextInt());
    }

}

Prima di tutto, dovendo interagire con il terminale, importiamo la classe Scanner inserendo all’inizio del file la dicitura “import java.util.Scanner;“. Adesso possiamo creare il metodo void, perchè non dobbiamo restituire nessun valore, e dargli come nome per esempio setValues. Al suo interno creiamo un nuovo oggetto Scanner e per ogni attributo inseriamo un println per dare un minimo di contesto e subito dopo richiamiamo il metodo set corrispondente passandogli il metodo dell’oggetto Scanner corrispondente al tipo dell’attributo che stiamo considerando. Quindi per l’attributo marca, che è di tipo Stringa, al metodo setMarca() passiamo sc.nextLine() dove sc è l’oggetto Scanner mentre nextLine è il metodo per acquisire una riga completa come Stringa.


Successivamente viene richiesto il metodo toString, ovvero il metodo che viene richiamato in automatico quando stampiamo un oggetto della classe e che ci mostra le informazioni di essa.

import java.util.Scanner;

public class Televisore{
    private String marca, modello;
    private int dimensione;

    public Televisore(){
        setMarca("Default");
        setModello("Default");
        setDimensione(32);
    }

    public void setValues(){
        Scanner sc = new Scanner(System.in);
        System.out.println("Marca: ");
        setMarca(sc.nextLine());
        System.out.println("Modello: ");
        setModello(sc.nextLine());
        System.out.println("Dimensione: ");
        setDimensione(sc.nextInt());
    }

    @Override
    public String toString(){
        return "Marca: " + this.marca + " Modello: " + this.modello + "Dimensione: " + this.dimensione;
    }
}

Essendo il metodo toString ereditato dalla classe Object (tutte le classi che creiamo estendono Object), inseriamo @Override per essere sicuri di andare a sovrascrivere il metodo toString. Subito sotto andiamo a dichiarare un metodo pubblico che restituisce obbligatoriamente una stringa, che si chiama appunto toString e con nessun parametro in ingresso. All’interno inseriamo un semplice return con la stringa che desideriamo restituire, solitamente si mettono i parametri importanti della classe accompagnati da una piccola descrizione.


Infine, ci vengono richiesti i metodi set e get per i parametri inseriti in precedenza e, qualora si inserisse un parametro non valido, di lanciare un’eccezione.

import java.util.Scanner;

public class Televisore{
    private String marca, modello;
    private int dimensione;
    private final String[] marche = {"LG", "Samsung", "AKAI", "Sony"};
    private final String[] modelli = {"Az12312", "4K", "Pippo"};

    public Televisore(){
        setMarca("Default");
        setModello("Default");
        setDimensione(32);
    }

    public void setMarca(String marca){
        for(int i = 0; i < marche.length; i++){
            if(marca.equals(marche[i])){
                this.marca = marca;
                return;
            }
        }
        throw new IllegalArgumentException();
    }

    public void setModello(String modello){
        for(int i = 0; i < modelli.length; i++){
            if(modello.equals(modelli[i])){
                this.modello = modello;
                return;
            }
        }
        throw new IllegalArgumentException();
    }

    public void setDimensione(int dimensione){
        if(dimensione > 0){
            this.dimensione = dimensione;
        }
        throw new IllegalArgumentException();
    }

    public String getMarca(){
        return this.marca;
    }

    public String getModello(){
        return this.modello;
    }

    public int getDimensione(){
        return this.dimensione;
    }

    public void setValues(){
        Scanner sc = new Scanner(System.in);
        System.out.println("Marca: ");
        setMarca(sc.nextLine());
        System.out.println("Modello: ");
        setModello(sc.nextLine());
        System.out.println("Dimensione: ");
        setDimensione(sc.nextInt());
    }

    @Override
    public String toString(){
        return "Marca: " + this.marca + " Modello: " + this.modello + "Dimensione: " + this.dimensione;
    }
}

Per prima cosa andiamo a definire due array final (statici) dove inseriremo i valori che riteniamo accettabili per marca e modello, nel codice sopra li ho chiamati semplicemente marche e modelli. Adesso passiamo ai metodi set, per quanto riguarda setMarca e setModello bisogna scorrere con un ciclo for l’array che abbiamo creato precedentemente e al suo interno inserire un if dove come condizione mettiamo che se il parametro in ingresso al metodo set è uguale all’elemento dell’array che stiamo considerando, allora lo andiamo ad attribuire alla variabile della classe. Subito dopo mettiamo un return per far terminare l’esecuzione del metodo. Infine se scorrendo tutto l’array la condizione dell’if non è stata verificata, ovvero il valore che stiamo provando ad attribuire non rientra tra quelli scelti da noi, lanciamo un’eccezione tramite il comando throw, nell’esempio sopra ho scelto di lanciare IllegalArgumentException. Per quanto riguarda il metodo setDimensione, essendo un numero intero, il discorso è più semplice: basterà inserire un if dove verifichiamo che il numero sia positivo (> 0). Per concludere definiamo i metodi get che in questo caso non fanno altro che restituire il valore dell’attributo corrispondente tramite il comando return.


L’intero codice sorgente dell’esercizio si trova su Guthub qui!

Sei in possesso di altri compiti d’esame o esercizi e vuoi che li svolga? Contattami e inserisci il link per il download qui!
Per qualsiasi dubbio non esitare a lasciare un commento!

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.