2014-10-03 3 views
-7

Вот мой код. Мои программы делают все, что мне нужно, но как я могу выйти из цикла while? Пробовал разные варианты, но ничего не работало. Любые советы или помощь будут очень признательны. Большое спасибо за ваше время.Как выйти из цикла while?

P.S. (Я хочу выйти из цикла путем ввода пользователем), поэтому, когда они печатают 999, вы можете распечатать его и заканчивать.

package project02; 
import java.util.Scanner; 

public class Project02 
{ 



public static void main(String[] args) 
    { 
     Scanner scan = new Scanner(System.in); 

     //Declaring variables for a,b,and c 
     double a = 1; 
     double b = 8; 
     double c = 16; 

     //Declaring variables for roots 
     double x1 = 0; 
     double x2 = 0; 

     //Discremenent 
     double d = (Math.pow(b, 2) - 4*a*c); 

     //Inputs 
     System.out.println("Input the values a, b, and c for ax^2+bx+c = 0"); 
     System.out.println("Input a: "); 
     a = scan.nextDouble(); 

     System.out.println("Input b: "); 
     b = scan.nextDouble(); 

     System.out.println("Input c: "); 
     c = scan.nextDouble(); 

     while (d != 999) 
    { 
     if (d > 0) 
     { 
      x1 = (-b + Math.sqrt(b*b - 4*a*c))/2*a; 
      x2 = (-b - Math.sqrt(b*b - 4*a*c))/2*a; 

      System.out.println("Root 1 is: " + x1); 
      System.out.println("Root 2 is: " + x2); 
     } 
     else if (d == 0) 
     { 
      x1 = (-b + Math.sqrt(b*b - 4*a*c))/2*a; 

      System.out.println("There is only one real root at x = " + x1); 
     } 
     else 
     { 
      System.out.println("There are no real roots"); 
     } 
     System.out.println("\n" + "Input the values a, b, and c for ax^2+bx+c = 0 or enter 999 to  stop."); 

     System.out.println("Input a: "); 
     a = scan.nextDouble(); 

     System.out.println("Input b: "); 
     b = scan.nextDouble(); 

     System.out.println("Input c: "); 
     c = scan.nextDouble(); 

    } 
     System.out.println("Thank you!!!"); 
    } 
} 

ответ

1

Для выхода из цикла while вам необходимо установить d на 999. Я не вижу этого в вашем коде. Другой вариант - использовать «break». Например:

System.out.println("Input a: "); 
a = scan.nextDouble(); 
if(a == 999) { 
    break; 
} 

Или

System.out.println("Input a: "); 
a = scan.nextDouble(); 
if(a == 999) { 
    d = 999; 
    continue; 
} 
1

вы никогда не устанавливая «D» переменную, так это означает, что его никогда не 999. вам нужно прочитать входные данные от пользователя и установить переменную d внутри цикла

0

в вашем случае, вы должны break из цикла в то время, когда а = 999.

Как так:

System.out.println("Input a: "); 
a = scan.nextDouble(); 

if(a == 999) break; 

Что касается всей программы, я бы использовал вместо этого цикл do while.

Как это:

Scanner scan = new Scanner(System.in); 

//Variable for continue. 
String response = "n"; 

//Declaring variables for a,b,and c 
double a = 1; 
double b = 8; 
double c = 16; 

//Declaring variables for roots 
double x1 = 0; 
double x2 = 0; 

//Discremenent 
double d = (Math.pow(b, 2) - 4*a*c); 



do 
{ 
    //Inputs 
    System.out.println("Input the values a, b, and c for ax^2+bx+c = 0"); 
    System.out.println("Input a: "); 
    a = scan.nextDouble(); 

    System.out.println("Input b: "); 
    b = scan.nextDouble(); 

    System.out.println("Input c: "); 
    c = scan.nextDouble(); 

    if (d > 0) 
    { 
     x1 = (-b + Math.sqrt(b*b - 4*a*c))/2*a; 
     x2 = (-b - Math.sqrt(b*b - 4*a*c))/2*a; 

     System.out.println("Root 1 is: " + x1); 
     System.out.println("Root 2 is: " + x2); 
    } 
    else if (d == 0) 
    { 
     x1 = (-b + Math.sqrt(b*b - 4*a*c))/2*a; 

     System.out.println("There is only one real root at x = " + x1); 
    } 
    else 
    { 
     System.out.println("There are no real roots"); 
    } 
    System.out.println("Continue?(y/n)"); 
    response = scan.next(); 

} while(response.equalsIgnoreCase("y"); 

System.out.println("Thank you!!!"); 

Надеется, что это помогает!

+0

Я вернулся и попробовал это, но для этой части кода: System.out.println («Продолжить? (Y/n)»); response = scan.nextChar(); Я получаю сообщение об ошибке для scan.nextChar(), по какой-то причине ... – JJones

+0

Я редактировал код. Я запутал Java с другим языком. .nextChar() не существует. Вместо этого используйте строку для вашей переменной. Я также изменил сравнение в while() на что-то более чистое. – RaffBluffin

+0

Наконец-то он работал. Цените всю мою помощь. И не беспокойтесь, много спасибо! – JJones