Pomoc oko zadatka u Javi

Pomoc oko zadatka u Javi

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

Napisano: 11 Sep 2013 20:25

Imam neki kod iz C a da preradim za Javu...
Trećinu programa sam "prepisao", a već sam naišao na problem kod jedne metode...

   public static int BrojRedova(String putanja)    {       int br = 0;       try{       BufferedReader in = new BufferedReader (new FileReader(putanja));       do       {          br++;       }while(in.readLine() != null);              in.close();              }catch(IOException e)       {          System.out.println("Greska prilikom otvaranja datoteke");       }              return br;    }        public static void UcitajPodatkeUNiz(String putanja, double[] niz)    {       try       {          int brLinija = BrojRedova(putanja);                    BufferedReader in= new BufferedReader (new FileReader(putanja));                    for(int i = 0; i < brLinija; i++)          {                                 String temp = in.readLine();             niz[i] = Double.parseDouble(); //ova linija pravi exception          }                    in.close();       }catch(IOException e)       {          System.out.println("Greska prilikom ucitavanja podataka iz datoteke");       }    }        public static void main(String[] args)    {       int brojRedova = 0;       brojRedova = BrojRedova("30perioda.txt");       double[] niz = new double[brojRedova];       UcitajPodatkeUNiz("30perioda.txt", niz);    }

ubacio sam ceo kod, a ne samo problematičnu metodu, kako biste mogli da imate bolju predstavu o situaciji Very Happy

Dopuna: 11 Sep 2013 20:29

Izgleda da je problem u veličini niza koji java može da primi.... kada sam for petlju prebacio u while, broj redova je bio mnogo manji.... tacnije duplo manji.
             BufferedReader in= new BufferedReader (new FileReader(putanja));          int i = 0;                    while(in.readLine() != null)          {             niz[i++] = Double.parseDouble(in.readLine());          }          System.out.println(i);
I to me sad prilicno zbunjuje Confused



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 16 Jun 2005
  • Poruke: 2392
  • Gde živiš: Beograd

Duplo je manji zato što u ovom drugom slučaju za svaki prolaz petlje 2 puta pozivaš in.readLine() tj čitaš 2 reda. Mislim da u prvoj varijanti brojiš do broj linija + 1, jer je do while.

Ova druga varijanta bi verovatno mogla izmenjeno ovako:
  public static double[] ucitaj(String putanja)       {          int br = 0,i=0;          double[] niz=null;          try{                   BufferedReader in = new BufferedReader (new FileReader(putanja));                   while(in.readLine()!=null){             br++;          }                   if(br>0) {                   niz = new double[br];              in.close();              in = new BufferedReader (new FileReader(putanja));               }                   while(i<br){             niz[i++]=Double.parseDouble(in.readLine());          }                      in.close();                     }catch(IOException e)          {             System.out.println("Greska prilikom otvaranja datoteke");          }                     return niz;       }        public static void main(String[] args) {         double[] niz = ucitaj("30perioda.txt");                 }

Možda sam negde pogrešio, napisah ovo na brzinu, a gledao sam da ispratim tvoju ideju - jedino sam sažeo u jednu metodu, to možeš svakako da razdvojiš na 2 uz male izmene (ukoliko želiš ili ti je potrebno). Ako ti nešto nije jasno ili nešto nije u redu - piši. Smile



offline
  • Pridružio: 22 Feb 2013
  • Poruke: 30

Ovde si izostavio temp

for(int i = 0; i < brLinija; i++)
{
String temp = in.readLine();
niz[i] = Double.parseDouble(temp);
}
Wink

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

Jedna stvar da napomenem i to neka ti ostane u praksi.

Izbegavaj da u petlji proveravas NULL vrednost. TRUE ili FALSE . Ne mogu sada naci taj clanak zasto tako ali cim budem nasao postavicu ti.

Ovo zaboravi :  while(in.readLine() != null) ili je true ili je false
takodje incremente i decremente ne dodajes kao index niza : niz[i++] .

Zamisli facu debugera kada naidje na ovakav index niza. Moze ali nije dobra praksa

offline
  • Més que un club
  • Glavni vokal @ Harpun
  • Pridružio: 27 Feb 2009
  • Poruke: 3898
  • Gde živiš: Novi Sad,Klisa

Napisano: 12 Sep 2013 0:14

Ok. Nama je profesor rekao da mozemo i tako da radimo, pa sam mislio da skratim kod za jednu liniju Very Happy
Riddler sad cu da prekopiram tvoju metodu pa cu videti Ziveli

Dopuna: 12 Sep 2013 0:26

Radi ko sat. Ne trebaju dve metode uopste. Hvala Ziveli

Ko je trenutno na forumu
 

Ukupno su 3457 korisnika na forumu :: 89 registrovanih, 3 sakrivenih i 3365 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 6018 - dana 19 Dec 2025 13:41

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 015, 04bokibole, 4. Ozrenska, acov34, ALFASPORTIVO, AndrejPetar, Apok, ArmFPGA, AxeleX, bavar357, bbrasnjo3, Bivan, Bobrock1, bojcistv, Borski1977, Boxy, Bubimir, Cirkon, crnitrn, cvrle312, Dannyboy, darkkran, darkojbn, Dejan_vw, deLacy, Demi87, dragan_mig31, drale12, dushan, Dzoni2412, foksmolder, FOX, gobrad, Goran 0000, Igor Antonic, jarovitt, jeen yuhs, Jose, Kajzer Soze, kenny74, Kriglord, Kubovac, leptirleptir, Malahit, mercedesamg, Mi lao shu, Might is Right, mikrimaus, milenko crazy north, mnn2, nemkea71, Neutral-M, Niko Bitan, Nikoletina Bursac, Oscar, Otto Grunf, PedjaDikovic, Peruta, pirke96, Primus17, proka89, raptorsi, repac, Romibrat, SANDRO1973, sekretar, Sevatar, shlauf, shone34, Singidunumac, SOVO515, Str2022, taomaster, Tila Painen, tooooom, TRZH92, tubular, tuf, vathra, vjetar, Vlada1389, vuksa72, yip314, Zastava, zdrebac, ZetaMan, zivojin32, zokizemun, zombicar153