Salve ho il seguente esercizio diviso in parti:
Testo
codice:B) Fare in modo che ogni oggetto di questa classe contenga sempre dei dati validi 1) si offre un costruttore che richiede ora, minuti e secondi (in caso di uno o più valori non validi l’orario viene inizializzato a 0:00:00). 2) si offre un altro costruttore che richiede solo ora e minuti e imposta i secondi a zero (in caso di uno o più valori non validi l’orario viene inizializzato a 0:00:00). 3) si offre un altro costruttore che non richiede alcun parametro e imposta ore, minuti e secondi a zero 4) qualsiasi modifica richiesta con qualsiasi altro metodo viene annullata se porta ad un orario non valido (ovvero viene ripristinato l’ultimo orario valido)1- I costruttori sono concettualmente corretti? Cioè si possono fare in quel modo?codice:public class MyOrario { private int ore; private int minuti; private int secondi; private boolean formatoSecondi; //Costruttore che richiede ora, minuti e secondi public MyOrario(int ore, int minuti, int secondi) { this.ore = ore; this.minuti = minuti; this.secondi = secondi; if (orarioNonValido()) { setDefault(); } setFormatoSecondiSi(); } //Costruttore che richiede solo ora e minuti e imposta i secondi a zero public MyOrario(int ore, int minuti) { this.ore = ore; this.minuti = minuti; secondi = 0; if (orarioNonValido()) { setDefault(); } setFormatoSecondiSi(); } //Costruttore che non richiede alcun parametro e imposta ore, minuti e secondi a zero public MyOrario() { setDefault(); setFormatoSecondiSi(); } //Metodi Getter e Setter public int getOre() { return ore; } public void setOre(int ore) { this.ore = ore; if (orarioNonValido()) { setDefault(); } } public int getMinuti() { return minuti; } public void setMinuti(int minuti) { this.minuti = minuti; if (orarioNonValido()) { setDefault(); } } public int getSecondi() { return secondi; } public void setSecondi(int secondi) { this.secondi = secondi; if (orarioNonValido()) { setDefault(); } } //Metodo verifica correttezza orario inserito protected boolean orarioNonValido() { boolean nonValido = false; if ((ore < 1 || ore > 24) || (minuti < 0 || minuti > 59) || (secondi < 0 || secondi > 59)) { nonValido = true; } return nonValido; } //Metodo setter orario a 0 in caso di errore protected void setDefault() { ore = minuti = secondi = 0; }
2 - Inoltre è lecito fare il metodo setDefault che setta a a 0 (ore, secondi, minuti) ? invece di usare ogni volta ore=minuti=secondi=0???
Testo
codice:C) Consentire all’utente due tipi di stampe: 1) con i secondi (15:05:38) 2) senza secondi (15:05) Il valore di default è il primo (con i secondi). Si offrono all’utente tre metodi per gestire la presenza dei secondi nella stampa di un oggetto di tipo MyOrario: 3) setFormatoSecondiSi che imposta il formato di cui al punto 1 4) setFormatoSecondiNo che imposta il formato di cui al punto 2 5) getFormatoSecondi che restituisce vero se ci troviamo nella condizione di cui al punto 1 e falso in caso contrario.3- Si può fare in un altro modo (più efficente, o corretto) il metodo toString, magari utilizzando meglio gli if?codice://Metodi setter e getter per variabile boolean formatoSecondi public boolean setFormatoSecondiSi() { return formatoSecondi = true; } public boolean setFormatoSecondiNo() { return formatoSecondi = false; } public boolean getFormatoSecondi() { return formatoSecondi; } //Metodo toString public String toString() { String stringaOrario =""; if(formatoSecondi) { if(minuti < 10 && secondi < 10) { stringaOrario = ore + ":0" + minuti + ":0" + secondi; }else if(minuti < 10) { stringaOrario = ore + ":0" + minuti + ":" + secondi; } else if(secondi < 10){ stringaOrario = ore + ":" + minuti + ":0" + secondi; } else { stringaOrario = ore + ":" + minuti + ":" + secondi; } }else { if(minuti < 10) { stringaOrario = ore + ":0" + minuti; }else { stringaOrario = ore + ":" + minuti; } } return stringaOrario; }
Testo
codice:E) Offrire all’utente dei metodi per confrontare degli orari 1) un metodo per confrontare l’oggetto in questione con un altro oggetto di tipo MyOrario passato al metodo come argomento (che restituirà 0 se i due orari coincidono, 1 se il nostro orario è maggiore di quello passato, -1 se il nostro orario è inferiore a quello passato) 2) un metodo statico per confrontare due oggetti di tipo MyOrario passati al metodo come argomenti (che restituirà 0 se i due orari coincidono, 1 se il primo orario è maggiore del secondo, -1 se il primo orario è inferiore al secondo)4- Qui il problema sta nella leggibilità del codice, in seguito alle condizioni, come posso migliorarlo o renderlo più leggibile??codice://Metodo per confrontare l’oggetto in questione con un altro oggetto di tipo MyOrario //restituirà 0 se i due orari coincidono, 1 se il nostro orario è maggiore di quello passato, -1 se il //nostro orario è inferiore a quello passato public int confronto (MyOrario orarioDaConfrontare) { int risConfronto; if( (this.getOre() == orarioDaConfrontare.getOre() && this.getMinuti() == orarioDaConfrontare.getMinuti() && this.getSecondi() > orarioDaConfrontare.getSecondi()) || (this.getOre() == orarioDaConfrontare.getOre() && this.getMinuti() > orarioDaConfrontare.getMinuti()) || ( this.getOre() > orarioDaConfrontare.getOre()) ) { risConfronto = 1; }else if ( this.getOre() == orarioDaConfrontare.getOre() && this.getMinuti() == orarioDaConfrontare.getMinuti() && this.getSecondi() == orarioDaConfrontare.getSecondi() ){ risConfronto = 0; }else { risConfronto = -1; } return risConfronto; } //Metodo statico per confrontare due oggetti di tipo MyOrario passati al metodo come argomenti static int confronto (MyOrario orario, MyOrario orarioDaConfrontare){ return orario.confronto(orarioDaConfrontare); }
Grazie mille fin da ora

Rispondi quotando
