Вам уже хочется вводить коэффициенты a, b и с прямо с клавиатуры? Пожалуйста. Используйте метод System.in.read(byte[] bt), но учтите, что он записывает вводимые цифры в массив байтов bt в кодировке ASCII, в каждый байт по одной цифре. Массив байтов затем надо преобразовать в вещественное число, например методом Double (new string(bt)).doubleValue(). Непонятно? Загляните в
13. Вычислите с помощью условного оператора значение у, равное х + 1, если х < 0, равное х + 2, если 0 <= х < 1, и равное х + 10 в остальных случаях.
14. Запишите условный оператор, дающий логической переменной z значение true, если точка M^, у) лежит в единичном круге с центром в начале координат, и значение false в противном случае.
Основной оператор цикла — оператор while — выглядит так:
while
Вначале вычисляется логическое выражение
Оператор в цикле может быть и пустым, например следующий фрагмент кода:
int i = 0; double s = 0.0;
while ((s += 1.0 / ++i) < 10);
вычисляет количество i сложений, которые необходимо сделать, чтобы гармоническая сумма s достигла значения 10. Такой стиль характерен для языка С. Не стоит им увлекаться, чтобы не превратить текст программы в шифровку, на которую вы сами через пару недель будете смотреть с недоумением, пытаясь понять, что же делают эти операторы.
Можно организовать и бесконечный цикл:
while (true)
Конечно, из такого цикла следует предусмотреть какой-то выход, например оператором break, как сделано в листинге 1.5. В противном случае программа зациклится, и вам придется прекращать ее выполнение комбинацией клавиш
Если в цикл надо включить несколько операторов, то следует образовать блок операторов {} .
Второй оператор цикла — оператор do-while — имеет вид:
do
Здесь сначала выполняется оператор, а потом происходит вычисление логического выражения
В цикле do-while проверяется условие продолжения, а не окончания цикла.
Существенное различие между этими двумя операторами цикла только в том, что в цикле do-while
Например, пусть задана какая-то функция fx), имеющая на отрезке [
Листинг 1.5. Нахождение корня нелинейного уравнения методом бисекции
class Bisection{
static double f(double х){
return х*х*х — 3*x*x + 3; // Или что-то другое...
}
public static void main(String[] args){
double a = 0.0, b = 1.5, c, y, eps = 1e-8;
do{
c = 0.5 *(a + b); y = f(c); if (Math.abs(y) < eps) break;
// Корень найден. Выходим из цикла
// Если на концах отрезка [a; c] функция имеет разные знаки:
if (f(a) * y < 0.0) b = c;
// Значит, корень здесь. Переносим точку b в точку c // В противном случае: else a = c;
// Переносим точку a в точку c
// Продолжаем, пока отрезок [a; b] не станет мал } while(Math.abs(b-a) >= eps);
System.out.println("x = " +c+ ", f(" +c+ ") = " +y);
}
}
Класс Bisection сложнее предыдущих примеров: в нем кроме метода main() есть еще метод вычисления функции fx). Здесь метод f () очень прост: он вычисляет значение многочлена и возвращает его в качестве значения функции, причем все это выполняется одним оператором:
return
В методе main () появился еще один новый оператор — break, который просто прекращает выполнение цикла, если мы по счастливой случайности наткнулись на приближенное значение корня. Внимательный читатель заметил и появление модификатора static в объявлении метода f(). Он необходим потому, что метод f() вызывается из статического метода main (), о чем мы поговорим в следующей главе.
Третий оператор цикла — оператор for — выглядит так:
for