Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 Лекция Java.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
273.41 Кб
Скачать

7. Оператор continue

В некоторых ситуациях возникает потребность досрочно перейти к выполнению следующей итерации, проигнорировав часть операторов тела цикла, еще не выполненных в текущей итерации. Для этой цели в Java предусмотрен оператор continue. Ниже приведен пример, в котором оператор continue используется для того, чтобы в каждой строке печатались два числа.

class ContinueDemo {

public static void main(String args[]) {

for (int i=0; i < 10; i++) {

System.out.print(i + " ");

if (i % 2 == 0) continue;

System.out.println("");

} } }

Если индекс четный, цикл продолжается без вывода символа новой строки. Результат выполнения этой программы таков:

0 1

2 3

4 5

6 7

8 9

Как и в случае оператора break, в операторе continue можно задавать метку, указывающую, в каком из вложенных циклов вы хотите досрочно прекратить выполнение текущей итерации. Для иллюстрации служит программа, использующая оператор continue с меткой для вывода треугольной таблицы умножения для чисел от 0 до 9:

class ContinueLabel {

public static void main(String args[]) {

outer: for (int i=0; i < 10; i++) {

for (int j = 0; j < 10; j++) {

if (j > i) { System.out.println(""); continue outer;

}

System.out.print(" " + (i * j));

} } } }

Оператор continue в этой программе приводит к завершению внутреннего цикла со счетчиком j и переходу к очередной итерации внешнего цикла со счетчиком i. В процессе работы эта программа выводит следующие строки:

0

0 1

0 2 4

0 3 6 9

0 4 8 12 16

0 5 10 15 20 25

0 6 12 18 24 30 36

0 7 14 21 28 35 42 49

0 8 16 24 32 40 48 56 64

0 9 18 27 36 45 54 63 72 81

Вычисления в Java. Math. StrictMath.

В стандартной библиотеке языка Java содержатся два класса для произведения базовых математических операций, таких как возведение в степень, взятие логарифма, синуса, косинуса и так далее. Эти классы отличаются между собой различной точностью представления чисел на разных архитектурах процессора. Это классы Math и StrictMath

При использовании StrictMath получаем абсолютно одинаковый результат вычислений не зависимо от процессора, который установлен у пользователя программы. Это потому, что эта функция задумывалась создателями языка как базовая для всех примитивных типов данных и манипуляций с ними. Но как оказалось это не такая простая задача и обеспечение одинаковых результатов на различных платформах значительно уменьшают быстродействие. Большинство задач просто не требуют такой точности в вычислениях, для них гораздо важнее скорость этих вычислений. Это привело к разделению математической части библиотеки на быструю и выдающую одинаковый результат на разных процессорах.

Таким образом, если в решении вашей задачи важнее скорость — используйте класс Math, если же вам необходимо одинаковая работа (с точностью до бита) с примитивными типами данных, то ваш выбор — StrictMath. Константы и методы у них одинаковы, и более того некоторые методы класса Math просто вызывают аналогичные методы класса StrictMath.

Далее рассмотрим класс Math, содержащий различные математически функции. Рассмотрим некоторые из них:

арифметические

Math.abs(n)

возвращает модуль числа n.

Math.sqrt(n)

возвращает квадратный корень из n

Math.cbrt(n)

возвращает кубический корень аргумента

Math.pow(n,b)

возвращает значение степенной функции n в степени b (n и b могут быть вещественными).

Math.log(n)

возвращает значение натурального логарифма числа n

Math.log10(n)

возвращает значение десятичного логарифма числа n.

Math.signum(n)

возвращает 1.0 если число больше 0 и -1.0 если число меньше нуля и ноль, если аргумент равен нулю;

Math.hypot(x,y)

возвращает квадратный корень из суммы аргументов: sqrt(x2+y2);

Math.max(n1,n2)

возвращает большее из двух чисел

Math.min(n1,n2) 

возвращает меньшее из двух чисел;

округление

Math.round(n)

обычное округление

Math.ceil(n)

округляет значение в большую сторону

Math. floor(n)

округляет в меньшую сторону;

тригометрические

Math.cos(n), Math.sin(n), Math.tan(n)

тригонометрические функции sin, cos и tg от аргумента n, указанного в радианах.

Math.acos(n), Math.asin(n), Math.atan(n)

обратные тригонометрические функции, возвращают угол в радианах

Math.toDegrees(n)

переводит радианы в градусы

Math.toRadians(n)

 переводит градусы в радианы

Пример:

  1. System.out.println(Math.cbrt(8)); // 2.0  

  2. System.out.println(Math.ceil(2.1)); // 3.0  

  3. System.out.println(Math.copySign(3.4, -11.2)); // -3.4  

  4. System.out.println(Math.floor(9.999)); // 9.0  

  5. System.out.println(Math.hypot(3,4)); // 5.0  

  6. System.out.println(Math.max(3, 2)); // 3  

  7. System.out.println(Math.min(3, 2)); // 2  

  8. System.out.println(Math.nextAfter(4.45634D, -100)); //4.456339999999999  

  9. System.out.println(Math.nextUp(4.45634D)); // 4.456340000000001  

  10. System.out.println(Math.random()); // 0.45357720245424116  

  11. System.out.println(Math.round(4.5)); // 5

  12. System.out.println(Math.round(Math.PI)); // выведет 3

  13. System.out.println(Math.round(9.5)); // выведет 10

  14. System.out.println(Math.round(9.5-0.001)); // выведет 9  

  15. System.out.println(Math.signum(-34.78)); // -1.0  

  16. System.out.println(Math.toDegrees(Math.PI)); // 180.0  

  17. System.out.println(Math.toRadians(180)); // 3.141592653589793  

  18. System.out.println(Math.abs(-2.33)); // выведет 2.33

Подведя итог можно сказать, что если добавлять к классу, интерфейсу и методам ключевое слово strictfp, то можем быть уверены, что на всех платформах при работе с числами мы получим одинаковый результат.

Все перечисленные функции принимают вещественные аргументы, а тип возвращаемого значения зависит от типа аргумента и от самой функции.

Кроме функций в рассматриваемом классе имеются две часто используемых константы:

Math.PI

число «пи», с точностью в 15 десятичных знаков

Math.E

число Неппера (основание экспоненциальной функции), с точностью в 15 десятичных знаков.

В классе Math есть полезная функция без аргументов, которая позволяет генерировать псевдослучайные значения, т.е. при каждом вызове этой функции она будет возвращать новое значение.

Math.random() 

возвращает псевдослучайное вещественное число из промежутка [0;1).

Если требуется получить число из другого диапазона, то значение функции можно умножать на что-то, сдвигать и, при необходимости, приводить к целым числам.

Например:

System.out.println(Math.random()); // вещественное число из [0;1)

System.out.println(Math.random()+3); // вещественное число из [3;4)

System.out.println(Math.random()*5); // вещественное число из [0;5)

System.out.println( (int)(Math.random()*5) ); // целое число из [0;4]

System.out.println(Math.random()*5+3); // вещественное число из [3;8)

System.out.println( (int)(Math.random()*5+3)); // целое число из [3;7]

System.out.println( (int)(Math.random()*11)-5); // целое число из [-5;5]

Псевдослучайные числа имеют серьёзнейшие практические приложения и используются, например, в криптографии.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]