Help consiglio esercizio su java
Devo scrivere il seguente programma:
Si definisca una classe PuntoSuPiano che rappresenta un punto sul piano (chiaramente avrà due coordinate x e y)
Ho pensato di scrivere:
public class PuntoSuPiano {
public int x;
public int y;
public PuntoSuPiano(int x, int y){
this.x=x;
this.y=y;
}
}
------
Si definisca una classe Rettangolo costituita da due PuntiSuPiano "a" e "b", che rappresentano due "spigoli" del rettangolo. Rettangolo deve avere due costruttori uno con due e uno senza parametri (i due spigoli). Se non vi è alcun parametro, il costruttore costruisce un rettangolo con due spigoli rispettivamente in 0,0 e 1,1.
Ho scritto:
public class Rettangolo{
PuntoSuPiano a;
PuntoSuPiano b;
public Rettangolo (PuntoSuPiano a, PuntoSuPiano b){
/*sto supponendo che a sia il punto più vicino all'origine (e se non lo fosse??)
/* e che i punti a e b mi determinano i due vertici opposti del rettangolo
base=b.x-a.x;
altezza=b.y-a.y;
}
public Rettangolo(){
Rettangolo r=new Rettangolo (1,1)
}
------
Si definisca un metodo di istanza "isSquare" che restituisce true se il rettangolo ha i lati uguali, e false altrimenti.
public boolean isSquare (int base, int altezza){
if(base==altezza){
return true;
}else{
return false;
}
------
Si definisca un metodo di istanza "getArea" che restituisce l'area del rettangolo.
public int getArea (Rettangolo r){
return r.base*r.altezza;
}
------
Si definisca un metodo di istanza "isIn" che riceve come parametro un PuntoSuPiano e restituisce true se il punto è nell'area del rettangolo e false altrimenti.
public boolean isIn (PuntoSuPiano c){
if(c.x>=a.x && c.x<=b.x) && (c.y>=a.y && c.y<=b.y)){
return true;
}else{
return false;
}
------
Si definisca un metodo di istanza "intersect" che riceve come parametro un altro Rettangolo e che restituisce l'area dell'intersezione dei due rettangoli.
------
Si definisca un metodo di classe "join" che riceve come parametri due Rettangoli e restituisce un nuovo Rettangolo: tale rettangolo è il più piccolo rettangolo che contiene entrambi i rettangoli passati per parametro.
------
Si definisca un metodo di istanza "sum" che riceve come parametro un altro rettangolo e modifica l'istanza in modo da "agganciare" il rettangolo ricevuto per parametro in modo da ottenere un rettangolo con area maggiore. Se non è possibile agganciare il rettangolo, l'istanza non è modificata. Esempio A=[(1,1).(3,4)] B=[(3,1).(4,4)] C=[(2,2).(4,4)] A.sum(B) modifica A, A.sum(C) non modifica A.
Qullo che ho scritto tra i quesiti è un pò di ciò che sono riuscita a fare..(sarà tutto sbagliato, ma è il primo programma che provo a fare quindi apprezzate l'impegno..)
Se qualcuno è così gentile da aiutarmi, perchè non so dove mettere le mani...
P.S. I metodi d'istanza sono i metodi che realizzano le funzionalità degli oggetti; accedono a variabili d'istanza. Per un metodo d'istanza:
classe obj = new classe ( );
obj.metodo ( );
Si definisca una classe PuntoSuPiano che rappresenta un punto sul piano (chiaramente avrà due coordinate x e y)
Ho pensato di scrivere:
public class PuntoSuPiano {
public int x;
public int y;
public PuntoSuPiano(int x, int y){
this.x=x;
this.y=y;
}
}
------
Si definisca una classe Rettangolo costituita da due PuntiSuPiano "a" e "b", che rappresentano due "spigoli" del rettangolo. Rettangolo deve avere due costruttori uno con due e uno senza parametri (i due spigoli). Se non vi è alcun parametro, il costruttore costruisce un rettangolo con due spigoli rispettivamente in 0,0 e 1,1.
Ho scritto:
public class Rettangolo{
PuntoSuPiano a;
PuntoSuPiano b;
public Rettangolo (PuntoSuPiano a, PuntoSuPiano b){
/*sto supponendo che a sia il punto più vicino all'origine (e se non lo fosse??)
/* e che i punti a e b mi determinano i due vertici opposti del rettangolo
base=b.x-a.x;
altezza=b.y-a.y;
}
public Rettangolo(){
Rettangolo r=new Rettangolo (1,1)
}
------
Si definisca un metodo di istanza "isSquare" che restituisce true se il rettangolo ha i lati uguali, e false altrimenti.
public boolean isSquare (int base, int altezza){
if(base==altezza){
return true;
}else{
return false;
}
------
Si definisca un metodo di istanza "getArea" che restituisce l'area del rettangolo.
public int getArea (Rettangolo r){
return r.base*r.altezza;
}
------
Si definisca un metodo di istanza "isIn" che riceve come parametro un PuntoSuPiano e restituisce true se il punto è nell'area del rettangolo e false altrimenti.
public boolean isIn (PuntoSuPiano c){
if(c.x>=a.x && c.x<=b.x) && (c.y>=a.y && c.y<=b.y)){
return true;
}else{
return false;
}
------
Si definisca un metodo di istanza "intersect" che riceve come parametro un altro Rettangolo e che restituisce l'area dell'intersezione dei due rettangoli.
------
Si definisca un metodo di classe "join" che riceve come parametri due Rettangoli e restituisce un nuovo Rettangolo: tale rettangolo è il più piccolo rettangolo che contiene entrambi i rettangoli passati per parametro.
------
Si definisca un metodo di istanza "sum" che riceve come parametro un altro rettangolo e modifica l'istanza in modo da "agganciare" il rettangolo ricevuto per parametro in modo da ottenere un rettangolo con area maggiore. Se non è possibile agganciare il rettangolo, l'istanza non è modificata. Esempio A=[(1,1).(3,4)] B=[(3,1).(4,4)] C=[(2,2).(4,4)] A.sum(B) modifica A, A.sum(C) non modifica A.
Qullo che ho scritto tra i quesiti è un pò di ciò che sono riuscita a fare..(sarà tutto sbagliato, ma è il primo programma che provo a fare quindi apprezzate l'impegno..)
Se qualcuno è così gentile da aiutarmi, perchè non so dove mettere le mani...
P.S. I metodi d'istanza sono i metodi che realizzano le funzionalità degli oggetti; accedono a variabili d'istanza. Per un metodo d'istanza:
classe obj = new classe ( );
obj.metodo ( );




Risposte
sono un po' arrugginito (anzi molto) sulla programmazione ad oggetti...cmq:
se ho capito bene, dentro la classe dell'oggetto ci viene messo anche il /i costruttori....
poi, per esempio, non ho capito perche' nel costruire l'oggetto retangolo tramite il costruttore a 2 argomenti, ci metti anche base ed altezza, che non compaiono tra gli attributi di rettangolo....
se ho capito bene, dentro la classe dell'oggetto ci viene messo anche il /i costruttori....
poi, per esempio, non ho capito perche' nel costruire l'oggetto retangolo tramite il costruttore a 2 argomenti, ci metti anche base ed altezza, che non compaiono tra gli attributi di rettangolo....
Sì, ha dimenticato di dichiararli. Comunque, per il resto direi che va bene.
Due appunti:
- passa come parametro il rettangolo anche in IsSquare;
- al posto di if(...) else..., è molto meglio fare così return (base==altezza); , per esempio.
Due appunti:
- passa come parametro il rettangolo anche in IsSquare;
- al posto di if(...) else..., è molto meglio fare così return (base==altezza); , per esempio.
"322740":
Si definisca una classe Rettangolo costituita da due PuntiSuPiano "a" e "b", che rappresentano due "spigoli" del rettangolo. Rettangolo deve avere due costruttori uno con due e uno senza parametri (i due spigoli). Se non vi è alcun parametro, il costruttore costruisce un rettangolo con due spigoli rispettivamente in 0,0 e 1,1.
Ho scritto:
public class Rettangolo{
PuntoSuPiano a;
PuntoSuPiano b;
public Rettangolo (PuntoSuPiano a, PuntoSuPiano b){
/*sto supponendo che a sia il punto più vicino all'origine (e se non lo fosse??)
/* e che i punti a e b mi determinano i due vertici opposti del rettangolo
base=b.x-a.x;
altezza=b.y-a.y;
}
public Rettangolo(){
Rettangolo r=new Rettangolo (1,1)
}
------
nel costruttore devi mettere come si valorizzano gli attributi di Rettangolo, cioe' 'a' e 'b' (come hai fatto per PuntoSuPiano.
inoltre, a mio modesto parere, non metterei anche, come di ce TomSawyer, base ed altezza tra gli attributi di Rettangolo, in quanto non sono strettamente necessari.
puoi sempre inserire una funzione che, dato un rettangolo ,restituisce la base, ed un'altra analoga che restituisce l'altezza del rettangolo.
grazie
e per gli alri punti avete qualche idea?



e per gli alri punti avete qualche idea?
[quote=codino75][quote=322740]
Quindi i due costruttori dovrebbero essere così:
public Rettangolo(PuntoSuPiano a, PuntoSuPiano b){
this.a=a;
this.b=b;
}
public Rettangolo(){
a=?
b=??
}
e poi posso definire una funzione che mi calcola lo spigoli in questo modo, cioè come la distanza tra l'origine e il punto:
public double distanza(PuntoSuPiano p){
return Math.sqrt(Math.pow(p.x,2)+Math.pow(p.y,2);
}
Mi viene però un dubbio su che valori di a e b passare al 2 compilatore. Poichè a e b sono caratterizzati da due coordinate,
come le assegno?
Per quanto riguarda la funzione isSquare, che parametri le passo? Va bene se scrivo:
public boolean isSquare(double base, double altezza){
return(base==altezza);
}
In questo caso devo dichiarare base e altezza da qualche parte?
Grazie infinite per l'aiuto.
Quindi i due costruttori dovrebbero essere così:
public Rettangolo(PuntoSuPiano a, PuntoSuPiano b){
this.a=a;
this.b=b;
}
public Rettangolo(){
a=?
b=??
}
e poi posso definire una funzione che mi calcola lo spigoli in questo modo, cioè come la distanza tra l'origine e il punto:
public double distanza(PuntoSuPiano p){
return Math.sqrt(Math.pow(p.x,2)+Math.pow(p.y,2);
}
Mi viene però un dubbio su che valori di a e b passare al 2 compilatore. Poichè a e b sono caratterizzati da due coordinate,
come le assegno?
Per quanto riguarda la funzione isSquare, che parametri le passo? Va bene se scrivo:
public boolean isSquare(double base, double altezza){
return(base==altezza);
}
In questo caso devo dichiarare base e altezza da qualche parte?
Grazie infinite per l'aiuto.


"322740":[/quote][/quote]
[quote="codino75"][quote="322740"]
Quindi i due costruttori dovrebbero essere così:
public Rettangolo(PuntoSuPiano a, PuntoSuPiano b){
this.a=a;
this.b=b;
}
public Rettangolo(){
a=?
b=??
}
non garantisco nulla ma l'idea di base e' la seguente:
public Rettangolo(){
this.a=PuntoSulPiano(0,0)
this.b=PuntoSulPiano(1,1)
}
"322740":
Mi viene però un dubbio su che valori di a e b passare al 2 compilatore. Poichè a e b sono caratterizzati da due coordinate,
come le assegno?
non ho capito a che ti riferisci...mentre la funzione che calcola la distanza di un punto dal centro mi sembra corretta come struttura...(pero' mi pare non fosse richiesta dal testo del problema)
"322740":
Per quanto riguarda la funzione isSquare, che parametri le passo? Va bene se scrivo:
public boolean isSquare(double base, double altezza){
return(base==altezza);
}
questa non e' la funzione isSquare, ma la relazione di uguaglianza tra 2 numeri



non e' specificato nell'esercizio, ma credo che la funzione deve perendere in ingresso un oggetto del tipo Rettangolo, e restituire un booleano.
quindi l'intestazione sara':
public boolean isSquare(Rettangolo ret)
per quanto risuerda il corpo della funzione, ti conviene prima definire le 2 funzioni:
public double Base(Rettangolo ret)
public double Altezza(Rettangolo ret)
che saranno utilizzate nel corpodella funzione isSquare.
spero chiaro
Scusate, ho fatto un pò di casino...
Innanzitutto la funzione distanza non mi serve a nulla.
Allora definisco:
public double base(Rettangolo r){
if(a.x>b.x)
return a.x-b.x;
return b.x-a.x;
}
public double altezza(Rettangolo r){
if(a.y>b.y)
return a.y-b.y;
return b.y-a.y;
}
Per quanto riguarda isSquare:
public boolean isSquare(Rettangolo r){
if(r.base==r.altezza)
return true;
return false;
}
Può essere???????
Innanzitutto la funzione distanza non mi serve a nulla.
Allora definisco:
public double base(Rettangolo r){
if(a.x>b.x)
return a.x-b.x;
return b.x-a.x;
}
public double altezza(Rettangolo r){
if(a.y>b.y)
return a.y-b.y;
return b.y-a.y;
}
Per quanto riguarda isSquare:
public boolean isSquare(Rettangolo r){
if(r.base==r.altezza)
return true;
return false;
}
Può essere???????
mi sembra strutturalmente corretto
Va bene allora scrivere il seguente codice per la funzione isIN (naturalmente si suppone che il vertice a sia quello in basso a sx e b quello in alto a dx)
public boolean isIn (PuntoSuPiano c){
if(c.x>=a.x && c.x<=b.x) && (c.y>=a.y && c.y<=b.y))
return true;
return false;
}
E per l'area semplicemente:
public double getArea (Rettangolo r){
return r.base*r.altezza;
}
public boolean isIn (PuntoSuPiano c){
if(c.x>=a.x && c.x<=b.x) && (c.y>=a.y && c.y<=b.y))
return true;
return false;
}
E per l'area semplicemente:
public double getArea (Rettangolo r){
return r.base*r.altezza;
}
Mi aiutate sugli ultimi tre punti, per favore????
"codino75":
non e' specificato nell'esercizio, ma credo che la funzione deve perendere in ingresso un oggetto del tipo Rettangolo, e restituire un booleano.
quindi l'intestazione sara':
public boolean isSquare(Rettangolo ret)
forse ho sbagliato a suggerirti questa intestazione, inn quanto in effetti se isSquare e' un metodo della classe rettangolo non gli si deve passare nessun parametro.chiedo venia.
detto cio', mi sembra che la funzione isIn sia strutturalmente corretta.