Pages: [1]   Go Down
Print
Author Topic: oggetti  (Read 1571 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« on: 26-02-2012, 20:24:29 »

Salve quando creo 2 oggetti della stessa classe in cu ognuno dei 2 ha 2 variabili di qualsiasi tipo e poi implemento un metodo che sommi le 2 variabili e restituisca un oggetto della stessa classe come faccio poi a stampare la somma nel main Huh?testate
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #1 on: 26-02-2012, 21:13:06 »

Salve quando creo 2 oggetti della stessa classe in cu ognuno dei 2 ha 2 variabili di qualsiasi tipo e poi implemento un metodo che sommi le 2 variabili e restituisca un oggetto della stessa classe come faccio poi a stampare la somma nel main Huh?testate

Non ho ben capito, devi stampare solo la somma? Potresti direttamente scrivere una System.out.println() nel metodo internamente in modo che quando nel main lo richiami ti fa la stampa a video.
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #2 on: 27-02-2012, 01:09:17 »

Il metodo deve restituire un oggetto che contiene la somma
Se io lo stampo con il System mi stampa il nome della classe è l'indirizzo di memoria
Logged
tobia92
Matricola
*
Offline Offline

Posts: 58



« Reply #3 on: 27-02-2012, 10:36:21 »

"un oggetto contiene la somma" credo intendi che la classe dell'oggetto creato ha una variabile di istanza "somma",se vuoi stampare "somma" allora dovrai fare un opportuno metodo getSomma():...;

e poi se vuoi stamparlo nel main System.out.println(nomeoggetto.getSomma());

ovviamente se provi a stampare l'oggetto, è come se scrivessi nomeoggetto.toString() , di conseguenza si richiama il metodo toString della classe object, e ti stampa le informazioni che hai detto.

e comunque dareios intendeva di mettere la print nel metodo e non nel main, se l'obiettivo è solo stampare a video allora va anche bene, però poi non si può lavorare sulla "somma".

 
« Last Edit: 27-02-2012, 12:00:08 by tobia92 » Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #4 on: 27-02-2012, 10:52:25 »

Salve quando creo 2 oggetti della stessa classe in cu ognuno dei 2 ha 2 variabili di qualsiasi tipo e poi implemento un metodo che sommi le 2 variabili e restituisca un oggetto della stessa classe come faccio poi a stampare la somma nel main ?  testate
Lo puoi fare esattamente nello stesso modo di quando non implementi alcun metodo che sommi le due variabili e restituisca oggetti della stessa classe.

Credo che tu stia facendo un po' di confusione nel modo di esprimerti.
È un esercizio assegnato (in una prova, in un esame, ec...)? In tal caso, posta il testo completo e dettagliato dell'esercizio (meglio se è una immagine, tipo una foto scattata, oppure un PDF da Internet).
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #5 on: 27-02-2012, 12:01:52 »

non è un esercizio è una piccolo codice che ho scritto io ha piacere per chiarirmi le idee su alcune perchè ha tanto che non programmo ad oggetti è soltanto una piccola ) per capire come stampare i dati dell'oggetto della stessa classe   
Logged
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #6 on: 27-02-2012, 15:53:35 »

Code:

class Somma
{ public int tot;
public   int p;
public  byte c;

public Somma (int n)
{
p=n;

}


public Somma (byte m)
{
c=m;

}
public  Somma add(Somma s)
{


tot=p+c;

return new Somma(tot);
}
public String toString()
                         {return String.valueOf(tot);}

}

public class es
{
public static void main(String [] args)
{
Somma s=new Somma(324);

Somma s1=new Somma(2);

Somma s2;

s2=s.add(s1);


System.out.println(s2.toString());

}
}

questo è il codice non prendete in considerazione a cosa serve devo solo capire come stampare gli attributi di un oggetto nel main il fatto è che mi stampa 0  testate
invece di stampare la somma
Logged
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.475


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #7 on: 27-02-2012, 17:09:03 »

Ora ti mostro come si fa a capire come mai il tuo programma ha prodotto un certo output.
È una cosa che si dovrebbe imparare/insegnare a Programmazione 1, ma evidentemente a) devi aver perso la lezione dove questo veniva trattato b) non vi è stato insegnato (spero fortemente non sia il caso) c) ti è stato insegnato ma non l'hai (ancora?) studiato.
In ogni caso, c'è una grave lacuna da colmare .

Bene, per capire come mai il tuo programma ha prodotto quel certo oiutput, devi seguire il flusso del codice, dall'inizio alla fine, e capire tutti i passi che sono stati fatti.

Io lo farò all'indietro (backtracking), così forse si capisce meglio:
Per farla breve tu hai invocato
Code:
System.out.println (s2.toString())
1° semi-errore: il metodo toString viene inserito proprio per non dover essere richiamato manualmente.
Almeno non con le funzioni che lo richiamano automaticamente a loro volta: in questo caso, è stata invocata su System.out, che è di tipo PrintStream.
PrintString.println (Object x) a sua volta prima di tutto richiama String.valueOf (x) e siccome x è un oggetto, String.valueOf (Object obj) restituisce esattamente obj.toString() (se obj non è null, almeno). obj sarebbe il nostro s2.

Adesso, s2 è di tipo Somma. Somma.toString è stata ridefinita apposta da te per eseguire il codice:
Code:
return String.valueOf(tot);
Ora, tot è di tipo int, perciò String.valueOf (int n) restituisce esattamente quello che ci si aspetta, cioè una stringa della rappresentazione decimale del numero intero n, che sarebbe tot in questo caso.

Ma chi è s2.tot?
Scopriamolo insieme, analizzando la vita dell'oggetto s2.

s2 nasce dall'output dell'esecuzione di s.add(s1).
s è di tipo Somma. Il metodo add di Somma fa esattamente queste cose:
Code:
tot=p+c;
return new Somma(tot);
Ora ci chiediamo: quanto valeva tot su s (visto che è stato richiamato return Somma(tot) invocandolo nel contesto this=s) nella seconda di tali due operazioni? Ebbene tot era stato appena modificato assegnandogli il valore della somma di p e c, sempre quelle di s, nella prima delle due operazioni. Quindi ora ci chiediamo: quanto valevano rispettivamente p e c in quell'istante? L'unico altro punto in cui si vede usare s nel codice che precede s.add(s1) è nel main, in particolare nella istanziazione di s:
Code:
Somma s=new Somma(324)
.
Questo codice non ha fatto altro che assegnare ad s il riferimento ad un oggetto Somma nuovo in cui è stato eseguito il costruttore Somma(324). Ci sono due costruttori che prevedono un numero intero come parametro, uno che prevede int e uno byte. Quale dei due è stato usato? Facile, siccome 324 è troppo grande per stare dentro a un byte, viene usato certamente l'altro: questo altro costruttore semplicemente assegna p=n=324.
Quindi quando l'oggetto s viene istanziato, tutto il suo stato è rappresentato dalle coppie variabile=valore:
Code:
tot=0
p=324
c=0
(tot=c=0 poiché Java ai dati primitivi numerici non inizializzati manualmente, assegna sempre il rispettivo valore zero, di default)
Ora finalmente sappiamo che quando viene richiamato s.add(s1) valgono p=324 e c=0, quindi la somma p+c=324+0=324. Bene!

Tornando a ciò che dicevamo poco sopra, ora sappiamo che quando viene eseguito s.add(s1) viene, per ultimo, restituito new Somma(tot), cioè new Somma(p+c), cioè ancora new Somma(324).

Quindi s2=new Somma(324), in fin dei conti.
Stiamo eseguendo la istanziazione di un nuovo oggetto identicamente a come era successo prima per s, quindi omettiamo di ripetere la identica spiegazione di prima, giungendo semplicemente alla conclusione che, per s2 lo stato è:
Code:
tot=0
p=324
c=0

Tornando ancora a prima, quando ci chiedevamo "Ma chi è s2.tot?".
Ebbene adesso possiamo rispondere che vale ZERO.
Ed è proprio zero che viene mostrato da println.

Fine .

Faccio notare che tutto questo procedimento è un tipo di metodologia che qualsiasi tecnico programmatore deve saper adottare, figuriamoci chi è iscritto a un corso di laurea in Informatica. È importante abituarsi a fare da sé questo tipo di constatazioni, perché è fondamentale saperle fare istantaneamente all'occorrenza, giacché nel mondo vero (quindi fuori dal corso di Programmazione 1) sarà molto difficile trovare qualche fesso che ti fa gratis questi passaggi, quando avrai un problema di output non previsto, e una incapacità o inattitudine a tali pratiche potrebbe comportare anche il licenziamento (o la mancata assunzione, se la verifica alla capacità di attuarla dovesse dare esito negativo) e, se mi fosse chiesto, non potrei far altro che approvare una tale decisione .

Seconda cosa: tu hai scritto semplicemente
[...] non prendete in considerazione a cosa serve [...]
Da un lato questo ti fa onore, perché sgrava chi ti vuole aiutare dal dover capire il problema, da un altro lato mi rende impossibile dirti con certezza dove/come hai sbagliato, visto che non so cosa vuole fare il programma, e sono stato invitato a non prenderlo in considerazione. .

Buona sera .
Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #8 on: 27-02-2012, 17:30:06 »

purtroppo ho perso la lezione cmq non ho cpt bn quello che volevi dire voglio solo sapere come risolvere questo problema può dirlo in poche parole xke nn ho cpt nnt  

praticamente io ho perso la parte del toString se mi fai capire come fare ?

il programma deve fare la somma di 2 numeri il primo è in s è il secondo è in s1 e poi deve restituirmi la somma ovviamente
« Last Edit: 27-02-2012, 17:42:42 by Gpeppe69 » Logged
Gpeppe69
Apprendista Forumista
**
Offline Offline

Posts: 294



« Reply #9 on: 27-02-2012, 17:52:18 »

quello che voglio capire è come funziona il toString
Logged
Pages: [1]   Go Up
Print
Jump to: