я переписал свою любопытное»первую программу в Java, и теперь он выглядит следующим образом:Еще одна проблема с do..while
import java.util.*;
import static java.lang.Math.*;
public class FirstApp {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double a = 0;
double b = 0;
double c = 0;
double delta;
double x1 = 0, x2 = 0;
boolean repeat = false;
boolean decision = false;
System.out.println("Calculator 2.0");
System.out.println("Bartosz Kubacki 6.10.2016");
System.out.println("-------------------------------");
System.out.println("Welcome in Calculator 2.0 which helps you solve Ax^2 + Bx + C = 0.");
do
{
do
{
System.out.println("Enter A param (different from 0: ");
if(input.hasNextDouble())
{
a = input.nextDouble();
if(a == 0)
{
System.out.println("Param A needs to be different from 0!");
}
} else
{
input.nextLine();
System.out.println("Param A must be a number!");
}
} while(a == 0);
do
{
System.out.println("Enter B param: ");
if(input.hasNextDouble())
{
b = input.nextDouble();
repeat = false;
} else
{
input.nextLine();
System.out.println("Param B must be a number!");
repeat = true;
}
} while(repeat);
do
{
System.out.println("Enter C param: ");
if(input.hasNextDouble())
{
c = input.nextDouble();
repeat = false;
} else
{
input.nextLine();
System.out.println("Param C must be a number!");
repeat = true;
}
} while(repeat);
// Counting.. and showing results
delta = pow(b, 2) - (4 * a * c);
if(delta == 0)
{
x1 = (0 - b)/2 * a;
System.out.printf("There is one solution: %.2f\n", x1);
} else if(delta > 0)
{
x1 = ((0 - b) - sqrt(delta))/2 * a;
x2 = (b + sqrt(delta))/2 * a;
System.out.printf("There are two solutions: %.2f and %.2f\n", x1, x2);
} else
{
System.out.println("There is no solution.");
}
// Decyzja o kolejnych działaniach
do
{
System.out.println("Want make another eqation? [Y/N] ");
String dec = null;
if(input.hasNext("Y") || input.hasNext("N") || input.hasNext("y") || input.hasNext("n"))
{
dec = input.nextLine();
if(dec.equalsIgnoreCase("Y"))
decision = true;
else
decision = false;
repeat = false;
} else
{
input.nextLine();
repeat = true;
}
} while(repeat);
} while(decision);
input.close();
}
}
Все идет хорошо на самом деле, кроме:
Когда я положил (только 1 предупреждение)
Когда я отвечаю на Y или N, программа заканчивается, НО если я войду в систему,что-нибудь еще, как «g» «2» «w» и т. д., затем программа снова спрашивает меня (дважды и в первый раз), а затем, когда я вхожу в Y или N, он отлично работает.
Я действительно не знаю, что это значит, потому что во время компиляции нет предупреждений или ошибок.
Спасибо за все ответы. :)
Ваш код очень пригодится * если вы создадите вспомогательный метод, например. 'promptDouble()', поэтому эти первые 3 в основном идентичные петли могут быть устранены. – Andreas
Ниже приведен пример метода, который подсказывает http://stackoverflow.com/questions/39882635/how-to-find-out-which-variable-is-throwing-an-exception/39882790#39882790, как предлагает Андреас – weston