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)
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;
}
1- I costruttori sono concettualmente corretti? Cioè si possono fare in quel modo?
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.
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;
}
3- Si può fare in un altro modo (più efficente, o corretto) il metodo toString, magari utilizzando meglio gli if?
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)
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);
}
4- Qui il problema sta nella leggibilità del codice, in seguito alle condizioni, come posso migliorarlo o renderlo più leggibile??
Grazie mille fin da ora