FONForum
http://www.fonforum.org/

Grrrr
http://www.fonforum.org/viewtopic.php?f=8&t=10589
Stranica 1 od 1

Autoru:  Kai [ 30.09.2007. 15:54:58 ]
Tema posta:  Grrrr

Opet ja...
Smorio sam se sa ovim. Ne mogu da provalim u čemu je fora, a na mogu da završim izborni/seminarski bez ovoga...
Kod:
public static void main(String []args)
    {
        Test t=new Test();
        t.uradi();
    }
     public void uradi()
     {
        PutMat P,P1;
        String L[]=new String[2];
        String L1[]=new String[2];
        L[0]="111";L[1]="222";
        P=new PutMat(10," ",L);L[1]="333";
        P1=new PutMat();
        P1.Set(10," ",L);
        L1=P.GetLista();
        System.out.println(L1[0]+" "+L1[1]);
        L1=P1.GetLista();
        System.out.println(L1[0]+" "+L1[1]);
     }


Ovo je konstruktor, a .Set() potpuno ista

Kod:
 public PutMat(double Duzina, String Ime, String[] Lista)
    {
        this.Duzina=Duzina;
        this.Ime=Ime;
        this.Lista=Lista;
    }


.GetLista() ima return Lista; tip je naravno String[]
Kao izlaz mi Štampa
111 333
111 333
umesto:
111 222
111 333
:udri:
Verovatno je nešto jako debilno, al ja ne vidim. Verovatno zato što sam ja kucao. Tako da je svaki savet dobrodošao...

Autoru:  kliford [ 30.09.2007. 16:52:40 ]
Tema posta: 

Nisam skoro radio ovo, proveri ovo sto budem kazao, ali moguce je da si se zbunio oko referenci.

Konstruises L.
L[1] = '222'
Konstruises P, dodeljujes mu L.
U ovom trenutku P.L[1] = '222'.
Ako posle toga promenis L[1] u '333', ako bi ponovo pozvao P.L[1], dobio bi '333' jer u P.L cuvas referencu ka memorijskoj lokaciji gde ti je bilo upisano 222, a sada imas 333.

Ova deo koda:
Kod:
L1=P.GetLista();
System.out.println(L1[0]+" "+L1[1]);


treba da stavis pre:
Kod:
L[1]="333";
P1=new PutMat();
P1.Set(10," ",L);

Autoru:  Kai [ 30.09.2007. 17:21:03 ]
Tema posta: 

kliford je napisao:
treba da stavis pre:
Kod:
L[1]="333";
P1=new PutMat();
P1.Set(10," ",L);

Ovo mi ja samo za probu, ne mogu da koristim odmah podatak. Moram prvo sve da učitam iz fajla, pa da nešto menjam, pa tek onda da iskoristim...
Ali bio si u pravu... Provalio sam šta je. Zato sam se i okačio da odgovorim sam sebi :kreza:
U konstruktoru i .Set() ne mogu da stavim
Kod:
this.Lista=Lista;

Mora član po član tj. this.Lista[i]=Lista[i];
Primetio sam da obično sam sebi odgovaram u ovim postovima :D
Al dobro, možda će neko da ima sličan problem pa nek bude...
P.s. Da ne bude da sam nezahvalan. Hvala Klif :D

Autoru:  Bageri [ 30.09.2007. 23:13:24 ]
Tema posta: 

Ne morash clan po clan, nego mozesh klonirati taj niz (da se ne petljash sa ciklusom).

Ovo je standardni problem sa pokazivacima!
Nikad ne bi trebao vrednost pokazivackog parametra direktno dodeljivati bilo kojoj promenjivoj.
Desice se jednom da bude mnogo zapetljan program i da ne mozesh da ujurish na kojem mestu se pojavljuju loshi podaci...

Autoru:  Kai [ 30.09.2007. 23:38:06 ]
Tema posta: 

Bageri je napisao:
Ne morash clan po clan, nego mozesh klonirati taj niz (da se ne petljash sa ciklusom).

Ovo je standardni problem sa pokazivacima!
Nikad ne bi trebao vrednost pokazivackog parametra direktno dodeljivati bilo kojoj promenjivoj.
Desice se jednom da bude mnogo zapetljan program i da ne mozesh da ujurish na kojem mestu se pojavljuju loshi podaci...


Jbg, nisam te ukapirao :(
Šta konkretno misliš?
Kako da napišem?

Autoru:  Bageri [ 01.10.2007. 01:09:06 ]
Tema posta: 

Mozesh ovako:
Kod:
this.Lista=Lista.Clone();

ili
Kod:
Lista.CopyTo(this.Lista, 0);
samo kod drugog slucaja pazish da je this.Lista prazna, pre kopiranja elemenata.

- Nije preporucljivo zvati parametre istim imenom kao i promenjive (pa onda koristiti this). Teshko se nalaze greske, ako slucajno pogrsish u kucanju. /*Bolje da se parametar Lista zove paramLista, tj. za sve parametre da dodash prefiks param, da bi u svakom trenutku znao da li radish za promenjivom ili sa parametrom*/
- Po stanadrdu sve promenjive i parametri pocunju malim slovom, kao imana funkcija, a samo imena klasa i paketa pocinju velikim. /*Naravno, opet zbog laksheg snalazenja*/

Autoru:  Kai [ 01.10.2007. 01:31:23 ]
Tema posta: 

Hvala

Autoru:  Bageri [ 01.10.2007. 13:15:35 ]
Tema posta: 

Nisam bio skontao da ti o Javi pricash.
Tu bi Clone() trebalo da radi ,a umesto copyTo postoji System.arraycopy()

Stranica 1 od 1 Sva vremena su u UTC + 1 sat
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/