[ 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]
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.