2015-03-31 3 views
0

Что касается квадратичных уравнений (подробнее здесь: http://www.mathsisfun.com/algebra/quadratic-equation.html). Я взял в качестве входных данных a, b и c уравнения.Расчет коэффициентов квадратичных уравнений

Образец уравнения будет таким: 21x^2 - 8x - 4 Здесь a = 21, b = -8, c = -4. Итак, при решении (без формулы) => 21x^2 - 14x + 6x - 4 = 0.

Мне нужны два средних числа, то есть в этом случае 14 и 6 (коэффициенты считывания). Я думаю, что я сделал все правильно, но вход кажется бесконечным и не останавливается вообще. Вы можете исправить ошибку? Мне также интересно узнать, почему это произошло.

import java.util.Scanner; 
public class QuadFact { 
    static Scanner sc = new Scanner(System.in); 
    static int a,b,c; 
    static int P, diff, p; 
    static int i; 
    static boolean found = false; 

    void accept(){ 
     System.out.println("Enter the a, b, c"); 
     a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt(); 
    } 

    void compute(){ 
     P = a * c; 
     diff = 0; 
     while(!found){ 
      for (i = b + 1;;i++){ 
       diff = i - b; 
       p = i * diff; 
       if (p==P) { 
        found = true; 
        break; 
       } 
      } 
     } 
    } 

    void display(){ 
     System.out.print("These are the raw numbers, should be correct. 
     Still,\n it is advisable you verify it."); 
     System.out.println("One factor: " + i); 
     System.out.println("Other factor: " + diff); 
    } 

    public static void main(String[] args){ 
     QuadFact a = new QuadFact(); 
     a.accept(); 
     a.compute(); 
     a.display(); 
    } 
} 
+0

Попробуйте ввести здесь свой код здесь. Мы можем помочь вам отформатировать его. Ссылки могут быть мертвыми, и некоторые из нас с брандмауэрами (например, я) не могут даже попасть к вашей ссылке. –

+0

Хорошо, что происходит, когда вы пытаетесь отладить это с помощью отладчика или если это не так, когда вы используете инструкции println, чтобы узнать, что делает ваш код в критических точках? –

+0

У вас сбиты ваши симптомы. В вашем примере номера, которые вы хотите, - 14 и 6, а не 14 и 6. Вы должны искать два числа с продуктом P и суммой b, тогда как вы, похоже, ищете номера с продуктом P и разностью b. –

ответ

0

Я думаю, вы должны смотреть «с обеих сторон» Ь для факторного пары, которая добавляет к б и производит продукт A * C.

void compute(){ 
    P = a * c; 
    while(!found){ 
    for(i = 1; ; i++){ 
      diff = b - i; 
      if (i * diff == P) { 
       found = true; 
       break; 
      } 
      diff = b + i; 
      if (-i * diff == P) { 
       found = true; 
       break; 
      } 
     } 
    } 
}