[ virtualx @ 24.01.2008. 11:21 ] @
moze li tko pomoci.
imao sam zadatak: treba napisati program koji racuna kvadratnu jednacinu.
ja sam uardio, ali mi javlja gresku.
evo kod, a dole je slika:
sta treba popraviti?

Code:

class kvadratna {
  public static void main (String args []) {
    double a=2.5;      //deklaracija i dodjela vrijednosti
    int b=3;        //deklaracija i dodjela vrijednosti
    double c=5.26;        //deklaracija i dodjela vrijednosti
    double d;       //deklaracija
    double x1,x2;        //deklaracija nepoznatih x1 i x2
    System.out.println("a=2,5 "+"b=3 "+"c=5,26 ");        //ispisivanje brojeva a,b,c
    d=-(b*b)-4*a*c;         //racunanje parametra d
    if(d<0)            //ispitivanje uslova , da li je d manje od 0
    System.out.println("Rjesenja funkcije nisu realna");           //ispis poruke na ekran
    if(d==0) {           //ispitivanje uslova, da li je d=0
    x1=-b/2*a;        //racunanje nepoznate x1
    x2=x1;             //x1 i x2 su jednaki u ovom slucaju
    }
    System.out.println("Funkcija ima jedno rjesenje x1=x2="+x1); /*ispisivanje
    jednog rjesenja na ekran*/
    if(d>0) {          //ispitivanje uslova, da li je d>0
      x1=(-b+Math.sqrt(d))/2*a;        //racunanje nepoznate x1
      x2=(-b-Math.sqrt(d))/2*a;        //racunanje nepoznate x2
    }
    System.out.println("Funkcija ima 2 rjesenja: "); /*ispisivanje poruke
    da  funkcija ima 2 rjesenja*/
    System.out.println("x1="+x1+"x2="+x2);      //ispisivanje tih rjesenja
  }
}




[Ovu poruku je menjao hyle dana 24.01.2008. u 12:41 GMT+1]
[ kernel82 @ 24.01.2008. 11:52 ] @
Procitas poruku o gresci i sve ti bude jasno :)

Nije ti dovoljno da samo deklarises promenljive da bi ih posle koristio, pogotovo kad koristis naredbe grananja.

Compiler ne moze sa sigurnoscu znati da ces uci u tu granu tako da unapred javlja gresku.

Ono sto treba da naviknes da radis je


double x1 = inicijalna_vednost;
double x2 = inicijalna_vednost;
[ Java Beograd @ 24.01.2008. 12:13 ] @
Mada, kad se malo bolje pogleda kod, vidi se da će se x1 i x2 definitivno inicijaliyovati, jer d je sigurno ili <0, ili ==0 ili >0. Mislim, nema četvrtog. Ali, kompajler to "ne vidi".
Šta bi kompajler video ?

if d<0
x1=...
x2 =...
else if d>0
x1=...
x2 =...
else
x1=...
x2 =...


E, ovde je kompajleru sasvim jasno da će se x1 i x2 definitvno inicijalizovati. I neće rijaviti sličnu grešku. Doduše, kernel je takođe definitno u pravu.
[ samilen @ 24.01.2008. 18:54 ] @
Ako ne uđeš u if blok, onda nikada ne dodeljuješ vrednost za x1 i x2. To je OK ako te vrednosti ne želiš da pročitaš van if bloka, kao što ipak činiš.

Najbolje ti je da System.out.println("Funkcija ima jedno rešenje... uvučeš u if blok, kao i onaj sledeći tekst, a kod njih i imaš problem. To ima i logičkog smisla jer ne želiš da prikazuješ tekst netačnih poruka. Ovako ti se prikazuju sve tri poruke ( ako ispraviš grešku sa dodelom default vrednoti ).

Dakle, da rezimiram - sve je uredu samo uvuci tekstove poruka unutar if blokova.

[Ovu poruku je menjao samilen dana 24.01.2008. u 20:58 GMT+1]