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 1002 korisnika na forumu :: 41 registrovanih, 3 sakrivenih i 958 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., amaterSRB, babaroga, bbogdan, cavatina, ccoogg123, Denaya, DonRumataEstorski, Dorcolac, FOX, GAGI, ivan1973, janbo, Jeremiah, Kaplar2, Kriglord, Kubovac, kubura91, lord sir giga, Lošmi, Marko Marković, mercedesamg, Mi lao shu, mikrimaus, Milometer, MiroslavD, mkukoleca, mocnijogurt, nikoli_ca, Rema000, sasa87, Sirius, sokars, srbijaiznadsvega, ss10, Stoilkovic, Tas011, Tvrtko I, Vlada1389, Vlada78, voja64