Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Проверка ошибок Java / 24 сообщений из 24, страница 1 из 1
11.12.2017, 23:14
    #39568026
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Решил тут научиться 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
12.12.2017, 08:11
    #39568073
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
a*x^2 + b*y + c = 0, если следовать "канонической" записи из учебника школьной алгебры.
Если а == с == 0, то получаем линейное уравнение - прямая, проходящая через начало координат, для b <> 0 и неопределённость - для нулевого b.
Таким образом, если a == 0, то получается, то формула с дискриминантом - неприменима.
Может, всё-таки, внимательнее прочитать условие на сайте? Или вообще - послать двоешников в пешее эротическое путешествие?
...
Рейтинг: 0 / 0
12.12.2017, 08:21
    #39568076
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
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
12.12.2017, 15:06
    #39568377
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Задание такое, извините, на украинском:
авторСтворіть застосування що знаходить корені рівняння виду 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
12.12.2017, 20:18
    #39568648
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Код: 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
12.12.2017, 20:35
    #39568655
Музаффар
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
что я не понял зачем это?
Код: 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
12.12.2017, 21:06
    #39568673
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
StangЧуть модернизировал, но проблему это не решило."Пошли дурака за бутылкой, так он, дурак, одну и принесёт.
Если напрочь забыта школьная алгебра (я - забыл), то можно "почитать тыртырнет" и нужно обратить внимание, что квадратным будет уравнение, где коэффициент перед квадратичным членом - не равен нулю. Что вполне логично.
Второе.
Вы скопировали "ранний возврат" в одно место, но, почему-то, пропустили ещё два. И не выбросили (уже) мёртвый код.
...
Рейтинг: 0 / 0
12.12.2017, 21:08
    #39568674
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Музаффарчто я не понял зачем это?Если детерминант квадратного уравнения меньше нуля, то отсутствуют вещественные корни.
Задачи решать степенное уравнение в поле комплексных чисел - не было.
...
Рейтинг: 0 / 0
12.12.2017, 22:13
    #39568694
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Вот я не могу догнать... Сейчас у меня результат:
x1=NaN
x2=-Infinity
Что вполне нормально, ведь А равно нулю и у меня деление на ноль. Но по проверке у меня должно получиться:
x1=0.0
x2=0.0

Вот как?
...
Рейтинг: 0 / 0
12.12.2017, 22:33
    #39568698
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
StangВот как?Если "а == 0", то мы получаем линейное уравнение (уравнение прямой).
С какого перепугу вы решаете линейное уравнение как квадратичное?
Термин " область определения " слышали? Хотя бы краем уха? Раньше, вроде, в школе давали вместе с алгеброй.
...
Рейтинг: 0 / 0
12.12.2017, 22:42
    #39568702
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Вообще, логичной выглядит нормировка коэффициентов до "x^2 + (b/a)*x + c/a".
Тогда для идиотский вариантов деление на ноль будет возникать "прям сразу".
...
Рейтинг: 0 / 0
12.12.2017, 22:54
    #39568703
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Я то понял, но как это решить в контексте задания и проверок? Я его тупо обманул, приняло такой код:
Код: 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
13.12.2017, 00:37
    #39568724
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Что же вы такой трудный-то ...
Код: 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
13.12.2017, 00:40
    #39568726
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Два последних условия в моём условном примере - лишние, но, надеюсь, подход стал понятнее.
...
Рейтинг: 0 / 0
13.12.2017, 01:11
    #39568733
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
ну, как-то так
Код: 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
13.12.2017, 01:26
    #39568734
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
экономим переменную
Код: 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
13.12.2017, 07:13
    #39568755
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Вот, сломал все, обратите внимание на ответы правильные по их варианту, а не по вашему, как вы вычисляете:
авторНЕВІРНО 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
13.12.2017, 08:36
    #39568765
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
StangМожет я и трудный, но как при этом получить нужное, я до сих пор не увидел.Возьмите ручку (карандаш), бумажку, учебник алгебры и решите квадратное уравнение самостоятельно.
Сверьте ваш ответ и ответ сайта. По результатам или ищите ошибку в своём коде или выкиньте к ...ням собачьим этот сайт.
...
Рейтинг: 0 / 0
13.12.2017, 09:02
    #39568780
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
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
14.12.2017, 14:10
    #39569625
Stang
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
Да я понял, что нужно еще и вводить линейное уравнение. Да, математику подзабыл, уже почти 17 лет прошло со школы. Да и само условие задачи криво поставлено.
Все равно, спасибо за помощь. Вникнул, вспомнил математику, польза огромная.
...
Рейтинг: 0 / 0
15.12.2017, 23:01
    #39570597
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
В комплексных числах это решается норм. без проверки условия.

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

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

переменные a и b по умолчанию должны быть равны 1.
...
Рейтинг: 0 / 0
02.12.2018, 04:16
    #39741579
borysenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка ошибок Java
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
Форумы / Java [игнор отключен] [закрыт для гостей] / Проверка ошибок Java / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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