99 бутылок пива

Для всех любителей и профессионалов этого нелегкого дела.

Модераторы: Почётные модераторы, Модераторы "Программирование"

Re: 99 бутылок пива

Сообщение black_c » 12 июл 2016, 16:58

Naevus писал(а):но если тебе надо изменить пределы - умножай не на n, а на необходимый предел (видимо - на предел int? Сколько он в этом языке - не знаю)


Пределы int от -2147483648 до 2147483647, но я же не могу сразу умножить и на - и на + или методу Math() можно прямо указывать диапазон?
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение black_c » 12 июл 2016, 17:00

black_c писал(а):
Naevus писал(а):ps Массив в данном случае вообще не нужен - можно же сразу в консоль кидать результат рандома. или это требование ТЗ?


А как мне вывести количество вводимых пользователем переменных, не применяя массив?


Неправильно выразился, количество пользователем вводится, а не сами переменные.
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение [Psycho]-Fox » 12 июл 2016, 19:42

Логика немного не верная, правильнее так (Как реализовать в коде - думай сам):
* Размер массива = Кол-во выводимых чисел.
* Неизвестная переменная: Минимум и максимум выводимого числа?

Логика такая:
1. Получаем число от пользователя (n).
2. Делаем цикл "for (int i = 1; i < n; i++)", где n - введенное пользователем число.
3. В цикле For просто вызываем mach.random() нужного диапозона (Допустим - рандом от 0 до 9).
* Как и писали выше - mach.random() возвращяет число от 0 до 1 (Десятичное). Стоит умножить его на 10 и округлить до целого, причем в меньшую сторону (Если надо число от 0 до 9. При обычном округлении будет число от 0 до 10)
4. Собственно, всё.
* Если надо выводить числа через пробел - Стоит добавить после цикла "for" перемещение курсора на новую строку (Символ "\n" - тоесть "NewLine").
Skype: Fox_experience
Аватара пользователя
[Psycho]-Fox
Почётный пользователь
 
Сообщения: 2704
Зарегистрирован: 18 май 2010, 11:54

Re: 99 бутылок пива

Сообщение black_c » 12 июл 2016, 21:07

[Psycho]-Fox писал(а):mach.random() возвращяет число от 0 до 1 (Десятичное). Стоит умножить его на 10 и округлить до целого, причем в меньшую сторону (Если надо число от 0 до 9. При обычном округлении будет число от 0 до 10)


Это мне понятно, что если я умножу на миллиард, то он мне выводить будет от 0 до миллиарда (не включительно). А как сделать так, чтобы рандомные числа выводились не только от 0 до какого-то потолка, но в диапазоне, соответствующем примитиву int, т.е.
black_c писал(а):от -2147483648 до 2147483647
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение [Psycho]-Fox » 12 июл 2016, 21:11

В гугл забанили? Первая же ссылка: http://kostin.ws/java/java-math.html (Читаем примеры с функцией random() - адаптируем под свою задачу)
Skype: Fox_experience
Аватара пользователя
[Psycho]-Fox
Почётный пользователь
 
Сообщения: 2704
Зарегистрирован: 18 май 2010, 11:54

Re: 99 бутылок пива

Сообщение Naevus » 12 июл 2016, 21:17

Ну ты же как то их заталкиваешь в массив. Толкай их сразу в консоль.
for (int i = 0; i < n; i++) {
System.out.print((int)(Math.random() * 2147483647));
}

(2147483647 - максимальное число для 32-х разрядного типа int. Но по большому счету - если в ТЗ рандомные числа должны возвращаться в интервале типа int, то надо бы учесть то, что int может быть и меньше нуля...)
Личный раздел- Список недругов- pater_leo - Выбрать отмеченных- Отправить- Да
Аватара пользователя
Naevus
Модератор
 
Сообщения: 10681
Зарегистрирован: 24 сен 2007, 21:52
Откуда: Магнитогорск

Re: 99 бутылок пива

Сообщение KADMIy » 13 июл 2016, 16:03

а можно узнать для чего мазохизм с ситемной консолью? Имхо проще в любой на вкус ide-шечке консольку и долбаггер смотреть :-) столько вопросов сразу отпадает... ;-)
Для быстрого ответа ----> +(7)95О-7Ч5-57-78
Аватара пользователя
KADMIy
 
Сообщения: 1618
Зарегистрирован: 03 окт 2009, 15:41
Откуда: Магнитогорск, Стальная #опа России

Re: 99 бутылок пива

Сообщение black_c » 13 июл 2016, 16:17

Я только начал изучать язык, с нуля все советуют работать именно с командной строкой, "прочувствовать" код, вникнуть в синтаксис, набить руку, ну а после конечно IDE.
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение [Psycho]-Fox » 13 июл 2016, 17:44

IDE - отлично заменяет "Учителя", который ещё до компиляции ткнёт носом во все ваши опечатки, а во время выполнения - подскажет где ошибка (см. отладочную консоль).

В остальном - лиш немного поправлю: Начинать с консоли рекомендуют по одной простой причине - к ней не требуется кодить GUI (Графический интерфейс с кнопочками и прочими ништяками). Да и задача в начале решаются настолько простые, что GUI будет явно излишним. (Хотя есть отдельное искусство - консольный (текстовой) GUI)
Skype: Fox_experience
Аватара пользователя
[Psycho]-Fox
Почётный пользователь
 
Сообщения: 2704
Зарегистрирован: 18 май 2010, 11:54

Re: 99 бутылок пива

Сообщение KADMIy » 15 июл 2016, 15:35

Каждый кулик своё болото хвалит. :-)
Яков Файн например java уроки сразу же в Eclipse(но мы то ведь знаем какая тру ;-) ) делает, чтобы с простого можно было в идеешечке освоиться. Выбор у него такой, видимо из-за презентаций сделаных изначально с примерами работы в Eclipse. Современные он уже и на саблайме и на идее делает. :-)
Для быстрого ответа ----> +(7)95О-7Ч5-57-78
Аватара пользователя
KADMIy
 
Сообщения: 1618
Зарегистрирован: 03 окт 2009, 15:41
Откуда: Магнитогорск, Стальная #опа России

Re: 99 бутылок пива

Сообщение KADMIy » 15 июл 2016, 15:40

black_c писал(а):Это мне понятно, что если я умножу на миллиард, то он мне выводить будет от 0 до миллиарда (не включительно). А как сделать так, чтобы рандомные числа выводились не только от 0 до какого-то потолка, но в диапазоне, соответствующем примитиву int, т.е.
black_c писал(а):от -2147483648 до 2147483647


Блин... а с математикой как?
Диапазон: равен abs(min) + abs(max)
Результат от min до max: (Math.random() * диапазон) + (min)

ЗЫЖ Сорри за лисп-стайл :-D
Для быстрого ответа ----> +(7)95О-7Ч5-57-78
Аватара пользователя
KADMIy
 
Сообщения: 1618
Зарегистрирован: 03 окт 2009, 15:41
Откуда: Магнитогорск, Стальная #опа России

Re: 99 бутылок пива

Сообщение KADMIy » 15 июл 2016, 15:45

black_c, Если не секрет сколько лет?
Для быстрого ответа ----> +(7)95О-7Ч5-57-78
Аватара пользователя
KADMIy
 
Сообщения: 1618
Зарегистрирован: 03 окт 2009, 15:41
Откуда: Магнитогорск, Стальная #опа России

Re: 99 бутылок пива

Сообщение black_c » 15 июл 2016, 22:10

Очередные странности консоли Windows. Создаю по уроку синтезатор, который должен проиграть одну ноту, после компиляции и запуска нота как положено проигрывается, но после этого не могу писать команды в командной строке.

Даже строка с каталогом пропала
Изображение

Было до этого всегда так
Изображение
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение black_c » 15 июл 2016, 22:17

Забыл добавить, в коде есть обработка исключений, с этим может быть связано?

Изображение
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение [Psycho]-Fox » 15 июл 2016, 23:44

black_c писал(а):Забыл добавить, в коде есть обработка исключений, с этим может быть связано?

player.stop() скорее всего надо вызывать (Больше ждать вроде некого).
Ну или exit(0); в конце main() (Код 0 - нормальное завершение приложение)
Skype: Fox_experience
Аватара пользователя
[Psycho]-Fox
Почётный пользователь
 
Сообщения: 2704
Зарегистрирован: 18 май 2010, 11:54

Re: 99 бутылок пива

Сообщение black_c » 16 июл 2016, 09:39

Добавил System.exit(0), выполнение программы завершается, нота не проигрывается.
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение [Psycho]-Fox » 16 июл 2016, 12:02

black_c писал(а):Добавил System.exit(0), выполнение программы завершается, нота не проигрывается.

Значит точно - программа ждёт, пока проиграется мелодия (А она проигрывается в отдельном потоке).
Значит надо или добавить чтото вроде async() / await(), либо просто music.stop() / music.wait().
А что с примером из урока? (Там вообще есть готовый код?)
Skype: Fox_experience
Аватара пользователя
[Psycho]-Fox
Почётный пользователь
 
Сообщения: 2704
Зарегистрирован: 18 май 2010, 11:54

Re: 99 бутылок пива

Сообщение black_c » 16 июл 2016, 12:14

Код выше я привел, там просто сказано при запуске должна прозвучать нота, и меняя аргументы MIDI-события, можно менять ноты, инструмент, силу нажатия и т.д.
Я наверное поспешил, там просто несколько глав объединено в один урок по созданию музыкальной программы с GUI, чатом и т.д. Хотя, скорее всего, не скажут ничего, потому что программа-то закрываться кнопкой будет.
Аватара пользователя
black_c
 
Сообщения: 299
Зарегистрирован: 21 авг 2011, 18:35

Re: 99 бутылок пива

Сообщение KADMIy » 16 июл 2016, 16:36

После:
player.start();

Добавить:
Thread.sleep(3000);
player.stop();
player.close();

... и будет счастье, процесс завершится и не будет в памяти сидеть. Так же в виндовой консоли помогает Ctrl-C.
Для быстрого ответа ----> +(7)95О-7Ч5-57-78
Аватара пользователя
KADMIy
 
Сообщения: 1618
Зарегистрирован: 03 окт 2009, 15:41
Откуда: Магнитогорск, Стальная #опа России

Пред.

Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1