download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Грешки на писана в java програма

Автор
Съобщение
anonymous
Чет, 16.10.08, 23:00
Здравейте
Ще може ли някой да ми обясни две грешки които аз сам не можах да си обясня в кода на една програмка за решаване на квадратно уравнение
Грешките са за реда на второто "елс иф" и за реда на второто "елс"
import java.util.Scanner;
public class Kvadrat {
public static void main(String []args){
	Scanner input=new Scanner (System.in);
	double a, b, c, d=0, x, x1, x2, re=0, im=0;
	System.out.print ("Въведете а=");
	a= input.nextDouble ();
	System.out.print ("Въведете b= ");
	b= input.nextDouble ();
	System.out.print ("Въведете c=");
	c= input.nextDouble ();
	if (a==0 && b==0);
	System.out.println ("Изродено уравнение");
	else if (a==0){
		x = -c/b;
		System.out.println ("Линейно уравнение x=" + x);
	}
	else if (c==0){
		x1= -b/a;
		x2=0;
		System.out.println ("Два корена x1=" + x1 + " x2" + x2);
	}
	else {
		re= -b/(2*a);
		d= b*b - 4*a*c ;
		im = Math.sqrt(Math.abs(d))/2*a;
	if (d >= 0);
	x1 = re + im ;
	x2 = re -im ;
	System.out.println ("Два корена x1=" + x1 + " x2" + x2);
	}
	else {
		System.out.println ("Комплексни корени");
		System.out.println ( re + im + "i");
		System.out.println ( re + (-im)+ "I");
	}
}
}

Използвана програма Eclipse Installer

anonymous
Пет, 17.10.08, 07:54

RE: Грешки на писана в java програма

” import java.util.Scanner;
public class Kvadrat {
public static void main(String []args){
Scanner input=new Scanner (System.in);
double a, b, c, d=0, x, x1, x2, re=0, im=0;
System.out.print ("Въведете а=");
a= input.nextDouble ();
System.out.print ("Въведете b= ");
b= input.nextDouble ();
System.out.print ("Въведете c=");
c= input.nextDouble ();
if (a==0 && b==0); // махни ;
System.out.println ("Изродено уравнение");
else if (a==0){
x = -c/b;
System.out.println ("Линейно уравнение x=" + x);
}
else if (c==0){
x1= -b/a;
x2=0;
System.out.println ("Два корена x1=" + x1 + " x2" + x2);
}
else {
re= -b/(2*a);
d= b*b - 4*a*c ;
im = Math.sqrt(Math.abs(d))/2*a;
if (d >= 0); // замени ; с {
x1 = re + im ;
x2 = re -im ;
System.out.println ("Два корена x1=" + x1 + " x2" + x2);
}
else {
System.out.println ("Комплексни корени");
System.out.println ( re + im + "i");
System.out.println ( re + (-im)+ "I");
}
}
}
} //end class

не е тествано
редактиран от anonymous на 17.10.08 08:01
anonymous
Пет, 17.10.08, 12:40
Ако махна реда if (a==0 && b==0); и заменя if (d >= 0); ми се нарушава алгоритъма
и грешките си остават
редактиран от anonymous на 17.10.08 12:42
boy4o
Пет, 17.10.08, 13:10
Казва ти да махнеш знака ; след if (a==0 && b==0)

Освен това в цялата if-else грамада не успявам да разбера към коеif се отнася последната клауза else. Май си няма if.
 
Аха, май го разплетох. Наистина си нямаше if. Целият фрагмент става така:
if (a==0 && b==0){
	System.out.println ("Изродено уравнение");}
	else if (a==0){
			x = -c/b;
			System.out.println ("Линейно уравнение x=" + x);
		}
		else if (c==0){
				x1= -b/a;
				x2=0;
				System.out.println ("Два корена x1=" + x1 + " x2" + x2);
			}
			else {
				re= -b/(2*a);
				d= b*b - 4*a*c ;
				im = Math.sqrt(Math.abs(d))/2*a;
				if (d >= 0){
					x1 = re + im ;
					x2 = re -im ;
					System.out.println ("Два корена x1=" + x1 + " x2" + x2);
				}
			
				else {
					System.out.println ("Комплексни корени");
					System.out.println ( re + im + "i");
					System.out.println ( re + (-im)+ "I");
				}
			}
} // main
} // class 
 

Не знам дали съм нарушил програмната логика, но поне се компилира...

редактиран от boy4o на 17.10.08 13:25
редактиран от boy4o на 17.10.08 13:46
anonymous
Пет, 17.10.08, 14:01
Бойчо, стана получи се ! Много ти благодаря на теб и на коко5 за помощта !
boy4o
Пет, 17.10.08, 14:17
Общо взето след if не се слага ;, освен в много специални случаи, а блоковете отнасящи се до него него винаги заграждай с фигурни скоби. Това понякога не е наложително, но е по-ясно.

И едно практическо правило - избягвай конструкцията if-else, когато е възможно и я заменяй с изреждане на if-ове. Така ще избегнеш натрупването на ненужно много оператори и произтичащото от това оплитане.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.