Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 14.08.2011
Сообщений: 13

Пример из Книги Б.Эккеля (не могу разобраться)

14.08.2011, 17:32. Показов 1792. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Только начал изучать язык по книге этого автора. Наткнулся на пример по параграфу switch, программа, генерирующая случайную букву и определяющая, является ли она гласной или согласной. И мой разум застопорило:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//: c03:VowelsAndConsonants.java
// Демонстрация инструкции switch.
 
public class VowelsAndConsonants {
  public static void main(String[] args) {
    for(int i = 0; i < 100; i++) {
      char c = (char)(Math.random() * 26 + 'a');
      System.out.print(c + ": ");
      switch(c) {
      case 'a':
      case 'e':
      case 'i':
      case 'o':
      case 'u':
                System.out.println("vowel");
                break;
      case 'y':
      case 'w':
                System.out.println(
                  "Sometimes a vowel");
                break;
      default:
                System.out.println("consonant");
      }
    }
  }
} ///:~
Как в этом месте
Java
1
char c = (char)(Math.random() * 26 + 'a');
генерируется буква, да еще и случайная?
Если поконкретнее: почему именно Math.random() ? зачем конкретно множить на 26 (автор объясняет это количеством букв, но мне всеравно не понятно)? и зачем вообще + 'a'
Если Math.random() генерирует рандомное число в пределах от 0 до 1, допустим, у нас получилось 0.02. Умножаем его на 26, получаем 0.52. Как прибавление к этому 'a' (и в каком смысле прибавление) и приведение всего этого в типу char дайт нам в результате какой-то символ?
Спасибо заренее за любую помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.08.2011, 17:32
Ответы с готовыми решениями:

Разобраться в коде (пример из книги)
Создание игры Sudoku из книги Hello, Android – Ed Burnette. Есть класс Game, где прописана вся логика игры и условия выигрыша. Не могу...

Упражнения из книги Брюса Эккеля
Вечер добрый, форумчане. Не найдется ли у кого сделанных упражнений по книге Брюса Эккеля &quot;Философия С++&quot; Том 1 и Том 2? ...

Не понял строчку из программы RTTI из книги Брюса Эккеля
В главе &quot;Type Information&quot; книги Брюса Эккеля &quot;Thinking in Java&quot; есть пример: //: typeinfo/pets/PetCreator.java // Creates random...

3
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
14.08.2011, 18:05
shur, Math.random() дает некоторое число от 0 до 1 затем оно умножается на 26, так как всего 26 букв латинского алфавита, поэтому мы получаем число от 0 до 25. Но в таблице символов, например, в ASCII символы алфавита идут не с первого символа, а где-то с середины, поэтому плюсуется смещение буквы 'а'.
1
0 / 0 / 1
Регистрация: 14.08.2011
Сообщений: 13
14.08.2011, 18:45  [ТС]
То-есть, как я понял, если указать вместо 'a' другое значение, например, '~', то результат вычисления будет равен '~' или любому из следующих 25 символов, идущих в таблице символов после него?

Добавлено через 18 минут
Большое спасибо.
В книге этот момент объясняется так:
Так как Math.random( ) генерирует значения в пределах от 0 до 1, вам необходимо только умножить его на верхний предел границы чисел, которые вы хотите производить (26 для букв алфавита) и прибавлять смещение для установки нижней границы.
А поскольку ранее в книге ни о чем подобном речи не было, то смещение выглядит мистически и непонятно. Момент не для начинающих...
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
14.08.2011, 18:52
да, ну кстати можешь поэксперементировать, только если берется последний знак, то результат может быть непредсказуемым
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.08.2011, 18:52
Помогаю со студенческими работами здесь

Не могу выполнить пример из книги
Добрый день начал изучать C++, и уже столкнулся с первой проблемой не могу скомпилировать код ниже. Пример демонстрирует разницу между...

Не могу разобраться с примером из книги
Здраствуйте. Изучаю книгу Энди Харриса &quot;РНР и MySQl для начинающих&quot;. В примере, имеется два файла. 1-й HTML: &lt;html&gt; ...

Пример из учебника. Не могу разобраться.
Читаю книжку, не могу понять одно упражнение оттуда. Кого не затруднит, разъясните пожалуйста. Самое начало ООП, глава посвящена классам и...

Не могу разобраться с примером из книги Липпмана
#include &lt;iostream&gt; #include &lt;string&gt; using std::string; string &amp; shorterString(string &amp;s1, string &amp;s2) { auto &amp;r =...

Не могу разобраться с позиционированием изображений (пример внутри)
Здравствуйте! Выкладываю пример своей работы Не могу разобраться с позиционированием. До этого была проблема с отображением в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru