2015-07-07 3 views
0

Я полный новичок в кодировании, и я не уверен, как сформулировать этот вопрос на 100%. Я пытаюсь понять, почему моя программа хранит только первый вход для значения «a», даже если это число является отрицательным.Квадратичная формула с пользовательским вводом (Java)

Например: а = -1 (Значение должно быть больше 0. Введите значение «а» снова:) а = 1 Ь = 3 с = -4

Таким образом, когда программа компилируется это только имеет первое значение для 'a' (- 1) сохраняется вместо второго значения (1) и завершает программу, когда она попадает во второй блок кода. Я полностью озадачен о том, как исправить это:/

Вот мой код:

package quadratic; 

import java.util.*; 

//Program that does quadratic equations 
public class Quadratic{ 
    public static void main(String[] args){ 

     boolean run = true; 
     while(run){ //if program completes true, will start program again 
      Scanner sc = new Scanner(System.in); // set scanner to allow user input 

      System.out.println("Please enter value for 'a':"); 
      double a = (sc.nextDouble()); //looking for user input 
      if (a <= 0){ 
       System.out.print("Value must be greater than 0. Enter value 'a' again:\n"); 
       sc.nextDouble(); //prompt user again if value less than or equal to 0 
      } 
      System.out.println("Please enter value for 'b':"); 
      double b = (sc.nextDouble()); 
      System.out.println("Please enter value for 'c':"); 
      double c = (sc.nextDouble()); 
      System.out.printf("Values entered: a:%s b:%s c:%s \n",a,b,c); 

      if (Math.pow(b,2)- (4 * a * c) <= 0){ 
       System.out.println("Impossible. Program Terminating"); 
       System.exit(0); //Terminate program 
      } 

      double qf1 = (-b + Math.sqrt(Math.pow(b, 2) - (4 * a * c)))/(2 * a); 
      double qf2 = (-b - Math.sqrt(Math.pow(b, 2) -(4 * a * c)))/ (2 * a); 
      // qf stands for Quadratic Formula 
      System.out.printf("Anwser One: %s \n", qf1); //%s whatever qf1 returned 
      System.out.printf("Anwser Two: %s \n", qf2); //%s whatever qf2 returned 
     } 
    } 
} 

ответ

2

Вы просто позвоните

sc.nextDouble(); //prompt user again if value less than or equal to 0 

не

a = sc.nextDouble(); //prompt user again if value less than or equal to 0 

Итак, вы просто отбрасывая второй номер

Кроме того, вы можете просто ввести отрицательное число во второй раз, так как вы не проверить, что быть меньше нуля (подсказка: Может быть, петли, пока действительное значение a не вводится?)

+0

ОН! Спасибо, не могу поверить, что я не понял этого; – Onoinato

0
if (a <= 0){ 
    System.out.print("Value must be greater than 0. Enter value 'a' again:\n"); 
    sc.nextDouble(); //prompt user again if value less than or equal to 0 
    } 

Заменить приведенный выше код с:

if (a <= 0){ 
    System.out.print("Value must be greater than 0. Enter value 'a' again:\n"); 
    a = sc.nextDouble(); //prompt user again if value less than or equal to 0 
    } 

Plus, вы должны использовать цикл вместо if заявления, как:

while (a <= 0){ 
    System.out.print("Value must be greater than 0. Enter value 'a' again:\n"); 
    a = sc.nextDouble(); //prompt user again if value less than or equal to 0 
    } 
Смежные вопросы