Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Детали расчета

Читайте также:
  1. Альтернативный метод расчета по корректированным подуровням звукового давления
  2. Анализ результатов расчета вероятности отказа невосстанавливаемых систем без использования теорем умножения и сложения вероятностей
  3. Аудит расчетов с персоналом по оплате труда: цель и программа аудита, методика проверки. Ошибки, допускаемые при расчетах оплаты труда.
  4. Вывод основных расчетных формул для расчета изгибаемых железобетонных элементов прямоугольного сечения с одиночной арматурой.
  5. Вывод основных расчетных формул для расчета изгибаемых железобетонных элементов с одиночной арматурой по нормальным сечениям.
  6. Геометрическая (лучевая) теория расчета звукового поля в помещении. Структура первых отражений, их влияние на оценку качества звучания. Вид общей структуры процесса реверберации.
  7. График расчета Точки Безубыточности
  8. Данные для расчета квадратического отклонения
  9. Данные для расчета по заданию контрольной работы № 1
  10. Детали заказа

Инструкция:

char c = (char)(Math.random() * 26 + 'a');

заслуживает более подробного рассмотрения. Math.random( ) производит double, так что значение 26 переводится в double для выполнения умножения, которое также производит double. Это означает, что ‘a’ должно переводится в double для выполнения сложения. Результат типа double переводится назад к char с помощью приведения.

Что делает приведение к char? То есть, если вы имеете значение 29.7 и вы приводите его к char, будет ли результирующее значение равно 30 или 29? Ответ можно найти в этом примере:

//: c03:CastingNumbers.java// Что случается, когда вы приводите float // или double к целому значению? public class CastingNumbers { public static void main(String[] args) { double above = 0.7, below = 0.4; System.out.println("above: " + above); System.out.println("below: " + below); System.out.println( "(int)above: " + (int)above); System.out.println( "(int)below: " + (int)below); System.out.println( "(char)('a' + above): " + (char)('a' + above)); System.out.println( "(char)('a' + below): " + (char)('a' + below)); }} ///:~

Вот результат:

above: 0.7below: 0.4(int)above: 0(int)below: 0(char)('a' + above): a(char)('a' + below): a

Так что ответ такой: приведение float или double к целому значению происходит простым обрезанием.

Второй вопрос относительно Math.random( ). Тут производится значение от нуля до одного, включая или не включая значение ‘1’? На математическом языке: (0,1) или [0,1], или (0,1] или [0,1)? (Прямоугольная скобка означает “включая”, а круглая скобка означает “не включая”.) И в этот раз тестовая программа поможет получить ответ:

//: c03:RandomBounds.java// Может ли Math.random() производить 0.0 и 1.0? public class RandomBounds { static void usage() { System.out.println("Usage: \n\t" + "RandomBounds lower\n\t" + "RandomBounds upper"); System.exit(1); } public static void main(String[] args) { if(args.length != 1) usage(); if(args[0].equals("lower")) { while(Math.random() != 0.0) ; // Продолжаем пробовать System.out.println("Produced 0.0!"); } else if(args[0].equals("upper")) { while(Math.random() != 1.0) ; // Продолжаем пробовать System.out.println("Produced 1.0!"); } else usage(); }} ///:~

Для запуска программы наберите в командной строке:

java RandomBounds lower

или

java RandomBounds upper

В обоих случаях вы можете прервать программу в ручную в том случае, если окажется, что Math.random( ) никогда не производит 0.0 или 1.0. Но такой эксперимент может обмануть. Если вы узнаете, [26] что есть примерно 262 различных значений типа double в пределах от 0 до 1, вероятность достижения любого единичного значения экспериментально может превышать время жизни компьютера и даже экспериментатора. Считается, что 0.0 - включается в выходные значения Math.random( ). или, на математическом языке, [0,1).

Резюме

Эта глава заканчивает обучение фундаментальным особенностям, имеющимся в большинстве языков программирования: вычисления, последовательность операторов, приведение типов, выбор и итерации. Теперь вы готовы начать делать шаги, которые ближе продвинут вас в мир объектно-ориентированного программирования. Следующая глава расскажет о важности инициализации и очистки объектов, дальнейшие главы расскажут о сущности концепции скрытия реализации.


Дата добавления: 2015-09-11; просмотров: 7 | Нарушение авторских прав

Ключевое слово static | Ваша первая Java программа | Вставка HTML | Упражнения | Присвоение | Математические операторы | Операторы сдвига | Литералы | Руководство по операторам | Итерации |


lektsii.net - Лекции.Нет - 2014-2021 год. (0.03 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав