|
Poslao: 11 Sep 2013 20:29
|
offline
- NIx Car

- Legendarni građanin
- 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
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
|
|
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
|
Poslao: 11 Sep 2013 21:40
|
offline
- Riddler

- Elitni građanin
- 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.
|
|
|
|
|
|
|
Poslao: 11 Sep 2013 22:15
|
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);
}
|
|
|
|
|
|
|
Poslao: 11 Sep 2013 22:17
|
offline
- 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
|
|
|
|
|
|
|
|