Java...

maalla1
Chi mi aiuta a creare un programma in Java che risolva l'esercizio sotto???

Scrivere un programma che definisca la classe
Rettangolo con due attributi
base ed altezza di tipo intero.
------

Definire due costruttori:
- senza parametri: assegna 2 a base e 1 ad altezza
- con 2 parametri: assegna i valori a base e ad altezza
Il costruttore senza parametri deve richiamare
quello con due parametri
------

Definire un metodo pubblico che calcoli l'altezza
del rettangolo.
------

Scrivere un main che instanzi due oggetti di tipo
Rettangolo: il primo costruito con il costruttore
senza parametri ed il secondo costruito con quello
a due parametri.

Stampare l'area dei due rettangoli

Risposte
Nidhogg
In quali punti trovi difficoltà? Posta quello che hai provato a scrivere e vediamo cosa non va...

Saluti, Ermanno.

maalla1
Ho fatto così... E spero che sia giusto...

//classe Rettangolo

public class Rettangolo {
private int base;
private int altezza;

public Rettangolo(int base, int altezza) {
this.base = base;
this.altezza = altezza;
}
public Rettangolo() {
Rettangolo r = new Rettangolo(base, altezza);
base = 2;
altezza = 1;
}

public int area(Rettangolo r){
return r.base*r.altezza;
}
}

//main
public class ProvaRettangolo {

public static void main(String[] args) {
Rettangolo r1 = new Rettangolo();
Rettangolo r2 = new Rettangolo(5,8);
System.out.println("L'area del rettangolo costruito senza parametri è : " + r1.area(r1));
System.out.println("L'area del rettangolo costruito con i due parametri è : " + r2.area(r2));
}
}



IL PROBLEMA E' CHE ORA DOVREI RISCIRE A MODIFICARE IL PROGRAMMA NEL SEGUENTE MODO:
in modo che riceva i parametri del secondo rettangolo da riga di comando
Aggiungere poi al main la creazione di un terzo rettangolo ricevendo i parametri da tastiera a tempo di esecuzione.


GRAZIE

pigreco1
Nel main potresti fare così:

//Crei un flusso di dati provenienti da tastiera e li memorizzi come String nel buffer
//Praticamente il pezzo di codice di sotto ti permette di scrivere da tastiera.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String base = br.readLine();
String altezza = br.readLine();
Rettangolo r = new Rettangolo(base,altezza);
System.out.print("L'area del rettangolo è "+r.area(r)+"\n");

Nel costruttore come parametri dovresti mettere 2 String;
Esempio

public Rettangolo(String base, String altezza) {
Rettangolo r = new Rettangolo(base, altezza);
base = 2;
altezza = 1;
}

Prova a fare così e vedi se funziona, altrimenti proverò a farlo anche io e poi metterò il codice nel sito.


pigreco

pigreco1
Forse sarebbe meglio farlo così il costruttore

public Rettangolo(String base, String altezza) {
Rettangolo r = new Rettangolo(base, altezza);
}

maalla1
Grazie...

Nidhogg
"maalla":
Ho fatto così... E spero che sia giusto...

//classe Rettangolo

public class Rettangolo {
private int base;
private int altezza;

public Rettangolo(int base, int altezza) {
this.base = base;
this.altezza = altezza;
}
public Rettangolo() {
Rettangolo r = new Rettangolo(base, altezza);
base = 2;
altezza = 1;
}

public int area(Rettangolo r){
return r.base*r.altezza;
}
}

//main
public class ProvaRettangolo {

public static void main(String[] args) {
Rettangolo r1 = new Rettangolo();
Rettangolo r2 = new Rettangolo(5,8);
System.out.println("L'area del rettangolo costruito senza parametri è : " + r1.area(r1));
System.out.println("L'area del rettangolo costruito con i due parametri è : " + r2.area(r2));
}
}



IL PROBLEMA E' CHE ORA DOVREI RISCIRE A MODIFICARE IL PROGRAMMA NEL SEGUENTE MODO:
in modo che riceva i parametri del secondo rettangolo da riga di comando
Aggiungere poi al main la creazione di un terzo rettangolo ricevendo i parametri da tastiera a tempo di esecuzione.


GRAZIE


Diciamo che la scelta del tipo int per base e altezza non sia proprio ottimale...meglio float o double. Poi nel costruttore predefinito non c'è bisogno dell'istruzione "Rettangolo r = new Rettangolo(base, altezza);": infatti così la variabile r risulta mai utilizzata. Non c'è bisogno di istanziare un nuovo oggetto di tipo Rettangolo!! Il costruttore predefinito imposta automaticamente tutti i campi istanza con il valore predefinito corrispondente. Infine non c'è bisogno di modificare il costruttore, ma basterà invocarlo in questo modo: "Rettangolo r = new Rettangolo(Float.parseFloat(base),Float.parseFloat(altezza));". Se cambi il costruttore devi cambiare anche i tipi dei campi istanza e il costruttore predefinito...troppa fatica!!! :D

Saluti, Ermanno.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.