Esercizio triangolo con lato parallelo agli assi..
ragazzi, devo consegnare entro stasera un esercizio di informatica. L'esercizio è questo:
TRIANGOLO CON LATO PARALLELO A UN ASSE
1) Definire la classe Triangolo con i vertici dei 3 punti.
2) Scrivere una classe applicazione VerificaTriangolo che legge da input tre vertici di un triangolo (ammissibile) e che contiene un metodo boolean latoParallelo(Triangolo t)
che restituisce true se almeno uno dei lati e’ parallelo a uno degli assi cartesiani.
l'esercizio l'ho fatto e mi sembra anche giusto, ma alla compilazione mi da 2 errori..!! Non capisco come potrei risolvere il problema.. vi posto il mio codice..
scusate se è un problema banale, ma è da un pò che non riesco a venirne fuori.
Grazie mille!
TRIANGOLO CON LATO PARALLELO A UN ASSE
1) Definire la classe Triangolo con i vertici dei 3 punti.
2) Scrivere una classe applicazione VerificaTriangolo che legge da input tre vertici di un triangolo (ammissibile) e che contiene un metodo boolean latoParallelo(Triangolo t)
che restituisce true se almeno uno dei lati e’ parallelo a uno degli assi cartesiani.
l'esercizio l'ho fatto e mi sembra anche giusto, ma alla compilazione mi da 2 errori..!! Non capisco come potrei risolvere il problema.. vi posto il mio codice..
class VerificaTriangolo{ public static void (String []args){ double ax, ay, bx, by, cx, cy; ax=Lettore.in.leggiDouble(); ay=Lettore.in.leggiDouble(); bx=Lettore.in.leggiDouble(); by=Lettore.in.leggiDouble(); cx=Lettore.in.leggiDouble(); cy=Lettore.in.leggiDouble(); t = new Triangolo(ax, ay, bx, by, cx, cy); public static boolean latoParallelo(Triangolo t){ boolean vr; vr=true; if ((ax==bx))||(ax==cx)||(bx==cx)) || ((ay==by))||(ay==cy)||(by==cy)) else vr=false; return vr; } } class Triangolo { private double x1, y1, x2, y2, x3, y3; public Triangolo (double ax, double ay, double bx, double by, double cx, double cy) { this.x1 = ax; this.y1 = ay; this.x2 = bx; this.y2 = by; this.x3 = cx; this.y3 = cy; } } }
scusate se è un problema banale, ma è da un pò che non riesco a venirne fuori.
Grazie mille!
Risposte
Ciao,
copia qua il log del compilatore, così vediamo che errore ti da
ho letto il codice, mi sembra ci sia un problema di scoping (le graffe) e nel main cosa ci mette una dichiarazione di un metodo??
è l'ordine in cui chiami il costruttore Triangolo() che è sbagliato, riordina tutto:
-prima funzioni
-poi main
- inner class se vuoi
e poi riprova a compilare, vedrai che non avrai problemi.
poi nell'if hai qualche parentesi sbagliata, ricontrolla li.
ciao
copia qua il log del compilatore, così vediamo che errore ti da

ho letto il codice, mi sembra ci sia un problema di scoping (le graffe) e nel main cosa ci mette una dichiarazione di un metodo??
è l'ordine in cui chiami il costruttore Triangolo() che è sbagliato, riordina tutto:
-prima funzioni
-poi main
- inner class se vuoi
e poi riprova a compilare, vedrai che non avrai problemi.
poi nell'if hai qualche parentesi sbagliata, ricontrolla li.
ciao

L'implementazione del metodo latoParallelo è completamente errata...non mi riferisco alla logica.
Inoltre, a cosa serve istanziare Triangolo se latoParallelo non lo usa?
per quello che hai scritto tu: a niente.
Per quanto riguarda la classe Triangolo, mancano i metodi getter, quelli che dovrebbe utilizzare proprio il metodo latoParallelo; se ti scoccia implementarli allora rendi i campi di esemplare della classe Triangolo pubblici.
Inoltre, a cosa serve istanziare Triangolo se latoParallelo non lo usa?
per quello che hai scritto tu: a niente.
Per quanto riguarda la classe Triangolo, mancano i metodi getter, quelli che dovrebbe utilizzare proprio il metodo latoParallelo; se ti scoccia implementarli allora rendi i campi di esemplare della classe Triangolo pubblici.
la classe triangolo la uso quando creo il nuovo triangolo ocn new Triangolo no??
comunque ho ricontrollato il codice, mancava proprio la parola "main" O.O, poi ho portato il metodo boolean latoParallelo fuori dal corpo del main, ho reso public le variabili della classe triangolo che prima erano private, ho aggiunto delle parentesi alla condizione dell'if e ho compilato. Mi da altri tipi di errori riguardanti le variabili ax bx cx ay by cy.. gli errori sono questi
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:20: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:22: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
System.out.println(latoParallelo(t));
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ax
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable bx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ax
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable bx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ay
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable by
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ay
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cy
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable by
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cy
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
14 errors
e il codice ora è
... non capisco!!
comunque ho ricontrollato il codice, mancava proprio la parola "main" O.O, poi ho portato il metodo boolean latoParallelo fuori dal corpo del main, ho reso public le variabili della classe triangolo che prima erano private, ho aggiunto delle parentesi alla condizione dell'if e ho compilato. Mi da altri tipi di errori riguardanti le variabili ax bx cx ay by cy.. gli errori sono questi
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:20: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:22: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
System.out.println(latoParallelo(t));
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ax
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable bx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ax
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable bx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cx
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ay
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable by
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable ay
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cy
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable by
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:28: cannot find symbol
symbol : variable cy
location: class VerificaTriangolo
if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy)))
^
14 errors
e il codice ora è
import fiji.io.*; class VerificaTriangolo{ public static void main (String []args){ double ax, ay, bx, by, cx, cy; ax=Lettore.in.leggiDouble(); ay=Lettore.in.leggiDouble(); bx=Lettore.in.leggiDouble(); by=Lettore.in.leggiDouble(); cx=Lettore.in.leggiDouble(); cy=Lettore.in.leggiDouble(); t = new Triangolo(ax, ay, bx, by, cx, cy); System.out.println(latoParallelo(t)); } public static boolean latoParallelo(Triangolo t){ boolean vr; vr=true; if (((ax==bx)||(ax==cx)||(bx==cx)) || ((ay==by)||(ay==cy)||(by==cy))) vr=true; else vr=false; return vr; } class Triangolo { public double x1, y1, x2, y2, x3, y3; public Triangolo (double ax, double ay, double bx, double by, double cx, double cy) { this.x1 = ax; this.y1 = ay; this.x2 = bx; this.y2 = by; this.x3 = cx; this.y3 = cy; } } }
... non capisco!!
come ha detto xls, ti mancano le funzioni get e set (sai cosa sono?), mai sentito parlare di Principio di Parna, Delegation, Inheritance,... cose basilari di Java.
che tanto però in questo caso non servirebbero a molto, essendo una Inner Class...
essendo che in public static boolean latoParallelo(Triangolo t) non sa che cosa siano le variabili "ax" eccc...dove pensi che le cerchi, sono variabili libere...
per risolvere o ti crei funzioni get, o visto che hai reso pubbliche le variabili di Triangolo, basta che dai accesso, con t.ax ecc
comunque non è cosa da fare in generale...
che tanto però in questo caso non servirebbero a molto, essendo una Inner Class...
essendo che in public static boolean latoParallelo(Triangolo t) non sa che cosa siano le variabili "ax" eccc...dove pensi che le cerchi, sono variabili libere...
per risolvere o ti crei funzioni get, o visto che hai reso pubbliche le variabili di Triangolo, basta che dai accesso, con t.ax ecc
comunque non è cosa da fare in generale...
sinceramente non ho mai sentito parlare di principio di parna, delegation e inheritance... almeno nel mio corso non l'abbiamo fatto 
ma scusa come faccio a dare accesso alle variabili? t.ax t.bx ecc ecc ma dove lo devo scrivere?'

ma scusa come faccio a dare accesso alle variabili? t.ax t.bx ecc ecc ma dove lo devo scrivere?'
bhe dai un po' di fantastia 
nella classe di Triangolo hai definito le variabili globali x1, x2 ecc...
nella procedura latoParallelo(Triangolo t), cerchi di confrontare (ax==bx), vedi un ax da quelle parti che sia accessibile nello scoping della procedura?
passando "Triangolo t" hai accesso a "x1" x2, ecc della classe triangolo, perchè hai un'istanza della classe, perciò per sosituire ax....basta che dai istanza della variabile t.x1==t.x2
non è difficile, devi pensare che sei in programmazione ad oggetti...

nella classe di Triangolo hai definito le variabili globali x1, x2 ecc...
nella procedura latoParallelo(Triangolo t), cerchi di confrontare (ax==bx), vedi un ax da quelle parti che sia accessibile nello scoping della procedura?
passando "Triangolo t" hai accesso a "x1" x2, ecc della classe triangolo, perchè hai un'istanza della classe, perciò per sosituire ax....basta che dai istanza della variabile t.x1==t.x2
non è difficile, devi pensare che sei in programmazione ad oggetti...

hai ragione, devo ancora entrare nell'ottica giusta.. faccio le cose molto macchinosamente..
ho modificato il codice sostituendo ax ecc ecc nella condizione dell'if con t.x1 ecc ecc e mi dava questi errori
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:20: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:20: non-static variable this cannot be referenced from a static context
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:22: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
System.out.println(latoParallelo(t));
^
3 errors
Ho quindi dichiarato il tipo di t con "Triangolo t" (ma gia che scrivo new Triangolo(..) non dichiaro qui che t è di tipo Triangolo?!)
ed ora ho questo errore
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:21: non-static variable this cannot be referenced from a static context
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
1 error
ho modificato il codice sostituendo ax ecc ecc nella condizione dell'if con t.x1 ecc ecc e mi dava questi errori
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:20: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:20: non-static variable this cannot be referenced from a static context
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:22: cannot find symbol
symbol : variable t
location: class VerificaTriangolo
System.out.println(latoParallelo(t));
^
3 errors
Ho quindi dichiarato il tipo di t con "Triangolo t" (ma gia che scrivo new Triangolo(..) non dichiaro qui che t è di tipo Triangolo?!)
ed ora ho questo errore
C:\Users\Leonardo\Desktop\esercitazione info\VerificaTriangolo.java:21: non-static variable this cannot be referenced from a static context
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
1 error


dimmi una cosa che diavolo di IDE utilizzi?
come fa ha non segnarti certi errori?
il main accetta solo varibili, metodi STATICI.
così come hai scritto il codice, è un macello, cerca di riprogettarlo perchè se no la classe Triangolo come l'hai scritta li è inutile. Crea un nuova classe triangolo non una Inner Class.
come fa ha non segnarti certi errori?
il main accetta solo varibili, metodi STATICI.
così come hai scritto il codice, è un macello, cerca di riprogettarlo perchè se no la classe Triangolo come l'hai scritta li è inutile. Crea un nuova classe triangolo non una Inner Class.
@ leonarth: posta il codice che hai scritto.
ragazzi sono niubbo.. cos' è l ide??
comunque il codice che è scritto è questo:
ah comunque uso textpad.. se puo servire xD
import fiji.io.*; class VerificaTriangolo{ public static void main (String []args){ double ax, ay, bx, by, cx, cy; Triangolo t; ax=Lettore.in.leggiDouble(); ay=Lettore.in.leggiDouble(); bx=Lettore.in.leggiDouble(); by=Lettore.in.leggiDouble(); cx=Lettore.in.leggiDouble(); cy=Lettore.in.leggiDouble(); t = new Triangolo(ax, ay, bx, by, cx, cy); System.out.println(latoParallelo(t)); } public static boolean latoParallelo(Triangolo t){ boolean vr; vr=true; if (((t.x1==t.x2)||(t.x1==t.x3)||(t.x2==t.x3)) || ((t.y1==t.y2)||(t.y1==t.y3)||(t.y2==t.y3))) vr=true; else vr=false; return vr; } class Triangolo { public double x1, y1, x2, y2, x3, y3; public Triangolo (double ax, double ay, double bx, double by, double cx, double cy) { this.x1 = ax; this.y1 = ay; this.x2 = bx; this.y2 = by; this.x3 = cx; this.y3 = cy; } } }
ah comunque uso textpad.. se puo servire xD
credo di esserci riuscito!!! ho cambiato la posizione della classe triangolo cosi!!
import fiji.io.*; class VerificaTriangolo{ public static void main (String []args){ double ax, ay, bx, by, cx, cy; Triangolo t; ax=Lettore.in.leggiDouble(); ay=Lettore.in.leggiDouble(); bx=Lettore.in.leggiDouble(); by=Lettore.in.leggiDouble(); cx=Lettore.in.leggiDouble(); cy=Lettore.in.leggiDouble(); t = new Triangolo(ax, ay, bx, by, cx, cy); System.out.println(latoParallelo(t)); } public static boolean latoParallelo(Triangolo t){ boolean vr; vr=true; if (((t.x1==t.x2)||(t.x1==t.x3)||(t.x2==t.x3)) || ((t.y1==t.y2)||(t.y1==t.y3)||(t.y2==t.y3))) vr=true; else vr=false; return vr; } } class Triangolo { public double x1, y1, x2, y2, x3, y3; public Triangolo (double ax, double ay, double bx, double by, double cx, double cy) { this.x1 = ax; this.y1 = ay; this.x2 = bx; this.y2 = by; this.x3 = cx; this.y3 = cy; } }
perciò la classe triangolo deve stare fuori dal corpo main del programma? nel corpo main ci devono essere solo i metodi?
"leonarth":
perciò la classe triangolo deve stare fuori dal corpo main del programma? nel corpo main ci devono essere solo i metodi?
Nei metodi non puoi definire altri metodi, ma puoi solo effettuare chiamate ad esse.
Corretto:
import fiji.io.*; public class VerificaTriangolo{ public static void main (String []args){ double ax, ay, bx, by, cx, cy; Triangolo t; ax=Lettore.in.leggiDouble(); ay=Lettore.in.leggiDouble(); bx=Lettore.in.leggiDouble(); by=Lettore.in.leggiDouble(); cx=Lettore.in.leggiDouble(); cy=Lettore.in.leggiDouble(); t = new Triangolo(ax, ay, bx, by, cx, cy); System.out.println(latoParallelo(t)); } public static boolean latoParallelo(Triangolo t){ if (((t.x1==t.x2)||(t.x1==t.x3)||(t.x2==t.x3)) || ((t.y1==t.y2)||(t.y1==t.y3)||(t.y2==t.y3))) return true; return false; } /* INNER - CLASS */ private class Triangolo { public double x1, y1, x2, y2, x3, y3; public Triangolo (double ax, double ay, double bx, double by, double cx, double cy) { this.x1 = ax; this.y1 = ay; this.x2 = bx; this.y2 = by; this.x3 = cx; this.y3 = cy; } } //chiusura Inner - Class }
Triangolo per come l'ho definita, è una Inner-Class/Nested-Class, leggi qui http://download.oracle.com/javase/tutorial/java/javaOO/nested.html.
Il codice corretto devi metterlo in un file che si chiama VerificaTriangolo.java! Compila ed esegui.
se lo compilo il tuo codice mi da l ' errore
C:\Users\Leonardo\VerificaTriangolo.java:14: non-static variable this cannot be referenced from a static context
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
1 error
ma se il codice scritto da me funziona perchè devo modificarlo Per un fatto di correttezza strutturale?
C:\Users\Leonardo\VerificaTriangolo.java:14: non-static variable this cannot be referenced from a static context
t = new Triangolo(ax, ay, bx, by, cx, cy);
^
1 error
ma se il codice scritto da me funziona perchè devo modificarlo Per un fatto di correttezza strutturale?
"leonarth":
se lo compilo il tuo codice mi da l'errore
Si ho dimenticato static nella definizione della inner-class, ecco la dichiarazione corretta
private static class Triangolo
...se tu avessi letto il link lo avresti saputo correggere.
"leonarth":
ma se il codice scritto da me funziona perchè devo modificarlo Per un fatto di correttezza strutturale?
Si.