Newsgroup: it.comp.java
Titolo: cast

Ciao a tutti, vi chiedo già scusa per la domanda banale,ma proprio non
riesco a venirne fuori. Devo implementare una classe che rappresenti un n.
razionale x positivo in modo esatto come coppia di interi n e d, primi fra
loro, tali che x=n/d.
 Si tratta di utilizzare la seguente classe:
public class R {
 /*parte privata da completare*/
 public R() {/*da completare*/}
 public R(int numeratore , int denominatore ) {/*da completare*/}
 public R somma(R addendo2 ) { /*da completare, restituisce la somma
dell'oggetto (addendo1)  con addendo2 */ }
 public R prodotto(R fattore2 ) { /*da completare, restituisce il prodotto
dell'oggetto (fattore1)  con fattore2 */ }
 public String toString() { /*da completare, restituisce una stringa di
caratteri nel formato "numeratore/denominatore" */ }
 }
N.B. : volendo calcolare la somma a di due numeri b e c rappresentati come
oggetti di tipo R si dovrà usare un'espressione del tipo a = b.somma(c);
 idem per il prodotto
Questo che segue è un pezzo di quello che ho fatto io; il metodo toString()
sembra funzionare. Non so proprio come implementare
somma(...) e prodotto(...), in quanto in compilazione mi vengono sempre
segnalati errori di compilazione:
public class R {
 private int n;
 private int d;
 private float x;
 public R() {
   n=1;
   d=1;
   x=n/d;
 }
 public R(int numeratore , int denominatore ) {
  n=numeratore;
  d=denominatore;
 }
 public R somma(R addendo2 ) {
  x= x + addendo2;   // Questo non vuole funzionare per problemi di cast.
return this;
 }
 public R prodotto(R fattore2 ) { }
 public String toString() {
  return n + "/" + d;
 }
 }
Compilando risulta:
R.java:22: Incompatible type for +. Can't convert R to float.
che fare???
Grazie per l'aiuto,
adolfo



Ovvio che non funziona ... non puoi sommare ad un float, un oggetto di classe
R.
E' un po' come sommare pere con banane :-))) ... devi sommare float con float
quindi:
x = x + addendo2.x;
Ma attenzione! x dentro la classe R deve essere dichiarato public, non private
(per questo ti rimando ad un
qualsiasi libro che tratta dei modificatori di accesso .. forse anche le FAQ
curate da Castagna)
Ciao!

  x= x + addendo2;   // Questo non vuole funzionare per problemi di cast.
non puoi scrivere x + addendo2 !
in java non puoi ridefinire gli operatori
una soluzione potrebbe essere questa :
public R somma(R addendo2) 
{
	float y = addendo2.getFloatValue();
	x = x + y;
	return (this);
}
public float getFloatValue()
{
	return (x);
}
il resto lo lascio fare a te ;)
ciao_O
http://digilander.iol.it/schiele

 wrote in message
3adc889c...@news.tiscalinet.it...


 wrote in message
3ADC87C5...@gioia.it...


Forse mi sono spiegato da cani, chiedo perdono.
mmmh...
non devi cercare nelle faq per un problema simile ma 
piuttosto leggere un libro su java (ce ne sono anche in rete)
x = x + addendo2.x
addendo2 e' un oggetto 
x e' una variabile pubblica di tale oggetto, quindi x + addendo2.x 
somma la variabile x della classe corrente con la variabile x di addendo2
chiaro?
l'operazione non viene eseguita da addendo2.x
addendo2.x e' il modo in cui si accede ad un membro
di un oggetto in java (variabile o metodo che sia)
il metodo che ti avevo detto di aggiungere serviva
esclusivamente a non rendere pubblica la variabile x ;)
ciao_O
http://digilander.iol.it/schiele

 infatti x non è un metodo ma una variabile, quindi...?
addendo2 e' l'istanza della classe.
Per accedere ad un membro di una classe (e con membro intendo sia variabili, sia
metodi) devi utilizzare l'operatore "."
Quindi, se la classe R avesse una variabile che si chiama "cazzolina", per
referenziarla dovresti scrivere
addendo2.cazzolina
Ovviamente se "cazzolina" e' dichiarata private o protected non puoi accedervi
dall'esterno della classe (come invece accade in questo caso) ma solo
dall'interno della classe stessa. Spero di essere stato chiaro.


http://digilander.iol.it/schiele
...perche' ci sarebbe bisogno di rendere pubblica la variabile x?
A me risulta che un metodo di un oggetto di una certa classe puo' modificare 
gli attributi (anche privati) di un altro oggetto della stessa classe.
...o mi sbaglio?
Un saluto
  Lucio
-----------------------------------------
Lucio Benfante (benf...@MailandNews.com)
Brainbench MVP for Java 1
http://www.brainbench.com

...o mi sbaglio?
una variabile privata e' accessibile solo dalla classe dove e' dichiarata 
(lasciamo stare il caso in cui sia dichiarata static)
se mi fai vedere un pezzo di codice che dimostra il contrario sono pronto a ricredermi ;)
ciao_<
http://digilander.iol.it/schiele

 se mi fai vedere un pezzo di codice che dimostra il contrario sono pronto a ricredermi ;)
Penso intendesse dire:
private int x;
public int getx() { return x; }
public void setx() { this.x = x; }
Ecco fatto! Ora x e' "quasi" public :-)))))

...o mi sbaglio?
mea culpa
ho provato a verificare quello che dici e ho scoperto una cosa che non sapevo di java 
public class prova
{
        public prova()
        {
        }
 
        public static void main(String[] args)
        {
                dato p1 = new dato(1);
                dato p2 = new dato(2);
 
                System.out.println(p1);
                System.out.println(p2);
                p1.set(p2);
 
                System.out.println(p1);
        }
}
public class dato
{
        private int a = 0;
 
        public dato(int a)
        {
                this.a = a;
        }
 
        public void set(dato p)
        {
                a = p.a;
        }
        public String toString()
        {
                return ("a = " + a);
        }
}
quindi tornando al post originale basta scrivere x = x + addendo2.x
e si puo' lasciare x privata
ciao_@
http://digilander.iol.it/schiele
http://jame.sourceforge.net


mi sa che invece abbiamo toppato noi due :)))
http://digilander.iol.it/schiele
http://jame.sourceforge.net

 wrote in message
3adc889c...@news.tiscalinet.it...
