powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проверка ошибок Java
24 сообщений из 24, страница 1 из 1
Проверка ошибок Java
    #39568026
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил тут научиться Java. Есть простейшее задание, сделать решение квадратного уровнения. Без всяких заморочек, а на сайте вместо моих чисел, подставляются свои, и проверяются результаты. Все проверки код проходит, кроме одной - a=0, b=10, c=0. Должен получиться результат х1=0.0 и х2=0.0. Не пойму откуда, подскажите, пожалуйста.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
public class Main
{
	public static void main(String[] args)
	{
		double a=0;
		double b=10;
		double c=0;
		double D=(b*b) - (4*a*c);
		double x1, x2;

		if (D>0&&a!=0) {
			x1= (-b + Math.sqrt(D))/(2*a);
			x2= (-b - Math.sqrt(D))/(2*a);
			System.out.println("x1=" + x1);
			System.out.println("x2=" + x2);
		 }
		else if (D==0&&a!=0) {
			x1= (-b)/(2*a);
			x2= (-b)/(2*a);
			System.out.println("x1=" + x1);
			System.out.println("x2=" + x2);
		}
		else {
			System.out.println("x1=");
			System.out.println("x2=");
		}
		
	}
}
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568073
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a*x^2 + b*y + c = 0, если следовать "канонической" записи из учебника школьной алгебры.
Если а == с == 0, то получаем линейное уравнение - прямая, проходящая через начало координат, для b <> 0 и неопределённость - для нулевого b.
Таким образом, если a == 0, то получается, то формула с дискриминантом - неприменима.
Может, всё-таки, внимательнее прочитать условие на сайте? Или вообще - послать двоешников в пешее эротическое путешествие?
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568076
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stang
Код: sql
1.
  double D=(b*b) - (4*a*c);

Код: sql
1.
2.
3.
  double d = b*b - 4*a*c
  if (d < 0) { System.out.println("No real solution, exit."); return; }
  d = Math.sqrt(d);

Не надо повторно вычислять константы, даже тогда, когда это может сделать компилятор.
Ещё полезно избегать вложенных условных операторов, используя "досрочный возврат".
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568377
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задание такое, извините, на украинском:
авторСтворіть застосування що знаходить корені рівняння виду ax2 + bx + c = 0. Коефіцієнти задаються через змінні:

double a;
double b;
double c;
Примітка: для обрахування квадратного кореня використовуйте конструкцію Math.sqrt(). Наприклад:

double x = Math.sqrt(4);
після виконання х буде рівним 2

Результат повинен мати наступний формат (за умови що корені, наприклад, 2 та 3):

x1=2
x2=3
Якщо корінь один (наприклад 5)

x1=5
x2=5
Якщо корені відсутні

x1=
x2=
Чуть модернизировал, но проблему это не решило.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
public class Main
{
	public static void main(String[] args)
	{
		double a=0;
		double b=10;
		double c=0;
		double x1, x2;

		double D=(b*b) - (4*a*c);
                if (D < 0) {
                        System.out.println("x1=");
			System.out.println("x2=");
                        return;
                }
                D = Math.sqrt(D);


		if (D>0&&a!=0) {
			x1= (-b + D)/(2*a);
			x2= (-b - D)/(2*a);
			System.out.println("x1=" + x1);
			System.out.println("x2=" + x2);
		 }
		else if (D==0&&a!=0) {
			x1= (-b)/(2*a);
			x2= (-b)/(2*a);
			System.out.println("x1=" + x1);
			System.out.println("x2=" + x2);
		}
		else {
			System.out.println("x1=");
			System.out.println("x2=");
		}
		
	}
}


Ошибка:
авторПомилки
Неправильно обрахований результат. Для набору вхідних параметрів (0, 10, 0) очікуваний результат: x1=0.0
x2=0.0. Ваш результат: 'x1=
x2='
Ваша відповідь:
x1=
x2=
Правильна відповідь:
x1=0.0
x2=0.0
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568648
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
double a=0;
double b=10;
double c=0;
double D=(b*b) - (4*a*c);



значит

Код: java
1.
2.
D=100
a=0



и ни один if дальше не выполняется

Код: java
1.
2.
if (D>0 && a!=0) -> flse
else if (D==0&&a!=0) ->false
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568655
Музаффар
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что я не понял зачем это?
Код: java
1.
2.
3.
4.
5.
6.
7.
double D=(b*b) - (4*a*c);
if (D < 0) {
   System.out.println("x1=");
   System.out.println("x2=");
   return;
}
D = Math.sqrt(D);
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568673
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StangЧуть модернизировал, но проблему это не решило."Пошли дурака за бутылкой, так он, дурак, одну и принесёт.
Если напрочь забыта школьная алгебра (я - забыл), то можно "почитать тыртырнет" и нужно обратить внимание, что квадратным будет уравнение, где коэффициент перед квадратичным членом - не равен нулю. Что вполне логично.
Второе.
Вы скопировали "ранний возврат" в одно место, но, почему-то, пропустили ещё два. И не выбросили (уже) мёртвый код.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568674
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Музаффарчто я не понял зачем это?Если детерминант квадратного уравнения меньше нуля, то отсутствуют вещественные корни.
Задачи решать степенное уравнение в поле комплексных чисел - не было.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568694
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот я не могу догнать... Сейчас у меня результат:
x1=NaN
x2=-Infinity
Что вполне нормально, ведь А равно нулю и у меня деление на ноль. Но по проверке у меня должно получиться:
x1=0.0
x2=0.0

Вот как?
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568698
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StangВот как?Если "а == 0", то мы получаем линейное уравнение (уравнение прямой).
С какого перепугу вы решаете линейное уравнение как квадратичное?
Термин " область определения " слышали? Хотя бы краем уха? Раньше, вроде, в школе давали вместе с алгеброй.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568702
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, логичной выглядит нормировка коэффициентов до "x^2 + (b/a)*x + c/a".
Тогда для идиотский вариантов деление на ноль будет возникать "прям сразу".
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568703
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я то понял, но как это решить в контексте задания и проверок? Я его тупо обманул, приняло такой код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
public class Main
{
	public static void main(String[] args)
	{
		double a=0;
		double b=10;
		double c=0;
		double x1, x2;

		double D=(b*b) - (4*a*c);
                if (D < 0) {
                     System.out.println("x1=");
			         System.out.println("x2=");
                     return;
                }
                D = Math.sqrt(D);


		if (D>0) {
            if (a==0){
                 x1=x2=0.0;
                 System.out.println("x1=" + x1);
			     System.out.println("x2=" + x2);
                 return;}
            else {
			x1= (-b + D)/(2*a);
			x2= (-b - D)/(2*a);
			System.out.println("x1=" + x1);
			System.out.println("x2=" + x2);return;}
		 }
		else if (D==0) {
            if (a==0){
             
                 System.out.println("x1=");
			     System.out.println("x2=");
                 return;}
			x1= (-b)/(2*a);
			x2=x1;
			System.out.println("x1=" + x1);
			System.out.println("x2=" + x2); return;
		}
		else {
			System.out.println("x1=");
			System.out.println("x2=");
		}
		
	}
}
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568724
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что же вы такой трудный-то ...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
if (0 == a) { System.out.println("Линейное уравнение!"); return; }
b /= a; c /= a;
d = b*b - 4*c;
if (0 > d) { System.out.println("Нет вещественных корней!"; return; }
d = Math.sqrt(d);
// Используют или "ранний возврат" или вложенные условия
// "Ранний возврат", если он применим - читабельнее
if (условие1) {
// вычисления по ветке1
  return;
}
if (условие2) {
// вычисление по ветке2
  return;
}
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568726
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Два последних условия в моём условном примере - лишние, но, надеюсь, подход стал понятнее.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568733
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, как-то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Решатель {
  static public void main(String[] args) {
    if (3 > args.length) {
      System.err.println(" Недостаточно аргументов!");
      System.exit(87);
    }
    double a = Double.parseDouble(args[0]);
    if (0 == a) {
      System.err.println(" Линейное уравнение!");
      System.exit(13);
    }
    double b = Double.parseDouble(args[1]) / a;
    double c = Double.parseDouble(args[2]) / a;
    c = b*b - 4*c;
    if (0 > c) {
      System.err.println(" Нет вещественных корней!");
      System.exit(1);
    }
    b /= 2; c = Math.sqrt(c) / 2;
    System.out.println("Корни квадратного уравнения: " + (b + c) + " и " + (b - c));
  }
}

...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568734
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
экономим переменную
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Решатель {
  static public void main(String[] args) {
    if (3 > args.length) {
      System.err.println(" Недостаточно аргументов!");
      System.exit(87);
    }
    double a = Double.parseDouble(args[0]);
    if (0 == a) {
      System.err.println(" Линейное уравнение!");
      System.exit(13);
    }
    double b = Double.parseDouble(args[1]) / a;
    a = Double.parseDouble(args[2]) / a;
    a = b*b - 4*a;
    if (0 > a) {
      System.err.println(" Нет вещественных корней!");
      System.exit(1);
    }
    b /= 2; a = Math.sqrt(a) / 2;
    System.out.println("Корни квадратного уравнения: " + (b + a) + " и " + (b - a));
  }
}

...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568755
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, сломал все, обратите внимание на ответы правильные по их варианту, а не по вашему, как вы вычисляете:
авторНЕВІРНО Hide outputHide output
Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (3, 2.5, -0.5) очікуваний результат: x1=0.16666666666666666
x2=-1.0. Ваш результат: 'x1=1
x2=2'
Ваша відповідь:
x1=1
x2=2
Правильна відповідь:
x1=0.16666666666666666
x2=-1.0
Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (0, 0, 9999999999) очікуваний результат: x1=
x2=. Ваш результат: 'x1=1
x2=2'
Ваша відповідь:
x1=1
x2=2
Правильна відповідь:
x1=
x2=
Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (0, 10, 0) очікуваний результат: x1=0.0
x2=0.0. Ваш результат: 'x1=1
x2=2'
Ваша відповідь:
x1=1
x2=2
Правильна відповідь:
x1=0.0
x2=0.0
Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (1, 1.1, 0.1) очікуваний результат: x1=-0.09999999999999998
x2=-1.0. Ваш результат: 'x1=1
x2=2'
Ваша відповідь:
x1=1
x2=2
Правильна відповідь:
x1=-0.09999999999999998
x2=-1.0
Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (0, 0, 0) очікуваний результат: x1=
x2=. Ваш результат: 'x1=1
x2=2'
Ваша відповідь:
x1=1
x2=2
Правильна відповідь:
x1=
x2=
Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (3, -18, 27) очікуваний результат: x1=3.0
x2=3.0. Ваш результат: 'x1=1
x2=2'
Ваша відповідь:
x1=1
x2=2
Правильна відповідь:
x1=3.0
x2=3.0

У меня, изначально, возникла только одна ошибка, где входящие данные = 0, 10, 0. И вывод данных, ответ, должен быть такой, и никакой другой. Как и шапка до программы до объявления переменной D, с этого места уже мой код. Может я и трудный, но как при этом получить нужное, я до сих пор не увидел.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568765
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StangМожет я и трудный, но как при этом получить нужное, я до сих пор не увидел.Возьмите ручку (карандаш), бумажку, учебник алгебры и решите квадратное уравнение самостоятельно.
Сверьте ваш ответ и ответ сайта. По результатам или ищите ошибку в своём коде или выкиньте к ...ням собачьим этот сайт.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39568780
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stangавтор Помилки
Неправильно обрахований результат. Для набору вхідних параметрів (3, 2.5, -0.5) очікуваний результат: x1=0.1666666666666666 6
x2=-1.0
поправил глупую ошибку со знаком
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public class Решатель {
  static public void main(String[] args) {
    if (3 > args.length) {
      System.err.println(" Недостаточно аргументов!");
      System.exit(87);
    }
    double a = Double.parseDouble(args[0]);
    if (0 == a) {
      System.err.println(" Линейное уравнение!");
      System.exit(13);
    }
    double b = Double.parseDouble(args[1]) / a;
    a = Double.parseDouble(args[2]) / a;
    a = b*b - 4*a;
    if (0 > a) {
      System.err.println(" Нет вещественных корней!");
      System.exit(1);
    }
    b = -b / 2;  // поправил глупую ошибку со знаком
    a = Math.sqrt(a) / 2;
    System.out.println("Корни квадратного уравнения: " + (b + a) + " и " + (b - a));
  }
}

Код: plaintext
1.
 java Решатель 3 2.5 -.5
 Корни квадратного уравнения: 0.166666666666666 69  и -1.0
Проблему форматного вывода никто не отменял.

P.S. Раньше, в девятом классе, рассказывали про бесконечные периодические и непериодические дроби.
В школе это были десятичные дроби, но весь материал полностью применим к двоичным.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39569625
Stang
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я понял, что нужно еще и вводить линейное уравнение. Да, математику подзабыл, уже почти 17 лет прошло со школы. Да и само условие задачи криво поставлено.
Все равно, спасибо за помощь. Вникнул, вспомнил математику, польза огромная.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39570597
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В комплексных числах это решается норм. без проверки условия.

Собственно детская математика заканчивается там где вы поняли что
корень из отрицательного норм. извлекается и вполне себе детерминирован.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39571145
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stang,

YouTube Video
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39571147
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stang
Код: java
1.
2.
3.
double a = 1;
double b = 1;
double с = 0;

переменные a и b по умолчанию должны быть равны 1.
...
Рейтинг: 0 / 0
Проверка ошибок Java
    #39741579
borysenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stang,
Тоже долго ломал голову.
Решил таким способом:

public class SquareRoot {

public static void main(String[] args) {
double a = 3;
double b = 2.5;
double c = -0.5;

double x1, x2;

double D = b * b-4*a*c;
if(D>0){

x1 =(-b + Math.sqrt(D)) / (2 * a);
x2 =(-b - Math.sqrt(D)) / (2 * a);

if(Double.isNaN(x1)){
x1=0.0; }

if(Double.isInfinite(x2)){
x2=0.0;
}
System.out.println("x1="+ x1);
System.out.println("x2="+ x2);
}
else if (D==0){

x1=x2= -b / (2 * a);
if(!Double.isNaN(x1)){
System.out.println("x1="+x1);
System.out.println("x2="+x2);
}
else{
System.out.println("x1=");
System.out.println("x2=");
}

}
else{
System.out.println("x1=");
System.out.println("x2=");
}

}

}
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проверка ошибок Java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]