Loading...
pdechkova avatar pdechkova 95 Точки

Въведение в програмирането с Java

Здравейте,

Сигурно много от вас вече са започнали да се подготвят с помощта на книгата. Тук може да обсъждаме проблеми от задачите за упражнение, както и по-напредналите да ни помагат.

Задачата, която ме затруднява за сега е от тема Масиви, задача 4, а именно:

Напишете програма, която намира максималната редица от еднакви елементи в масив. Пример: {2, 1, 1, 2, 3, 3, 2, 2, 2, 1} - {2, 2, 2}.

Това е подсказката, която за мен не е от най-ясните:

Сканирайте масива отляво надясно и във всеки един момент пазете в една променлива последните колко позиции (до текущата включително) има еднакви стойности. Пазете най-добрия старт и най-добрата дължина за момента в отделни две променливи.

Аз съм стигнала до някъде. Не работи изобщо правилно, но ще помоля някой по-вещ да ми даде насоки.

 

Благодаря предварително! :)

Тагове:
0
Java Advanced
ViValDam avatar ViValDam 15 Точки

Доста напред в Джава си стигнала  - браво !

Мога да я направя на С#
3
pdechkova avatar pdechkova 95 Точки

Ами нещатата, който учихме в подготвителното ниво , се минават доста бързо :) Java и C# са почти еднакви, а задачите за упражнение са почти същите като от книгата за C# и тъй като вече веднъж съм ги решавала сега ми се струват леснички :)

 

Давай! Тя идеята ще е една и съща :)

2
HPetrov avatar HPetrov 822 Точки

Имаш един масив и 2 променливи, който не ги ползваш както трябва. Първата променлива sum трябва да ти пази моментната дължина на поредицата. Вече когато срещнеш различен елемент и влезев в "else"-а правиш проверка дали моментната сума е по-голяма от "sum2" - ако е - sum2 = sum. Дефакто sum2 ти пази дължината на най-дългата поредица. Един от начините да намериш стартовия индекс е пак като влезеш в "else" при проверката дали моментната сума е най-дълга да запазваш стартиращия индекс като от "i" извадиш "sum" + 1.

1
pdechkova avatar pdechkova 95 Точки

Сега го разработвам, но за сега все грешки ми дава laughing Иначе го разбрах, майlaughing Благодаря ти

0
IVANMARINOV1975 avatar IVANMARINOV1975 19 Точки

Аз имам идея но не знам дали има null в типа int  в JAVA.Идеята е да се направи масив със същата дължина като твоят и във всеки елемен на новия масив да стои колко пъти(брояч) се среща съответния елемент от твоя масив.Като го направиш тоя масив -брояч, му взимаш максималната стойност и идекса и сочи към стойността на твоя масив и задачата е решена и можеш да изпринтиш.

ТОзи масив-брояч се инициализира с 1 като за начало.После сканираш твоя масив от ляво на дясно и ако срещнеш равен елемент качваш брояча с 1 на съответното място , а равния елемен го правиш -null.Нужни са ти два вградени цикъла и if проверка за  null.

ЗА {2,1,1,2,3,3,2,2,2,1} съответния масив- брояч ще стане {5,3,1,1,2,1,1,1,1,1}.Т.е първия елемент от твоя масив се среща 5(max) пъти и е 2.Забележи че заради проверките с null -брояча брои първото срещане на 2 -ката ...

 

Не знам дали се разбира идеята..:)

1
pdechkova avatar pdechkova 95 Точки

 Ако съм разбрала добре, резултатът ще е колко пъти числото се среща в целия масив, а не колко пъти последователно. 

Би било полезно може би за тази задача :

8. Напишете програма, която намира най-често срещания елемент в масив. Пример: {4, 1, 1, 4, 2, 3, 4, 4, 1, 2, 4, 9, 3} - 4 (5 пъти).

0
VenIT avatar VenIT 63 Точки

Сортирай масива и след това брой елементите. Направи си една променлива за MaxLength (най-големият брой елементи) и една променлива за елемента,който се среща най-често. След  като масива е сортиран лесно ще преброиш (с while() например) ,колко пъти се среща и ако броя е по-голям от MaxLength, то това става MaxLength и запазваш елемента.

1
DNNdrago avatar DNNdrago 145 Точки

Условието на задачата е малко по-различно - търси се най-дългата редица от повтарящи се елементи в даден масив, а не най-срещаните стойности. 

0
VenIT avatar VenIT 63 Точки

Да така е,коментара ми е за най-често срещания елемент. А иначе за поредно срещаният вече дадоха съвети :) .

0
DNNdrago avatar DNNdrago 145 Точки

http://pastebin.com/gduqckTZ

 

Започвам обхождането на масива от втория му елемент. Вътре имам вложен цикъл, в който се влиза ако предходният елемент от масива има стойност равна на моментната, при което се инкрементират дължината на текущия брой повторения и индекса. След това идва проверката дали текущата дължина е по-голяма от най-голямата и съответната им логика.

Надявам се, че това е ясно, ако ли не - ще се радвам да помогна. :) 

3
pdechkova avatar pdechkova 95 Точки

Йеее, най-накрая се получи, а от вчера я мъча. Благодаря, много ми помогна smile 

0
ViValDam avatar ViValDam 15 Точки

DNNdrago Твоето решение също не включва случая , когато има повече от 1 най-дълги дължини.

Как ще стане ?

0
pdechkova avatar pdechkova 95 Точки

В самата задача не е казано какъв да е резулта в този случай. Сега връща 1вата дължина, а ако се сложи едно =, ще връща последната :)

if(maxlength <= length)

0
ViValDam avatar ViValDam 15 Точки

Моето решение :

 

http://pastebin.com/rRKjVhpD

 

Решениено е на C# - не знам как става на Джава.

- но можеш да си го преведеш или да се подсетиш .

решението не включва случая за 2 или повече еднакви по дължина най-дълги групи  ,като например{ 9 7 7 1 6 6 6 0 7}, но ще го направя и него.

Сега нямам време.
1
MarinPetrov avatar MarinPetrov 20 Точки

Здравейте някой може ли да ми каже, защо не иска да ми се активира конзолата и да приеме числа , единствено става, ако след Scanner input = new Scanner(System.in); принтирам нещо на конзолата иначе ми казва ама инпута не ти е затворен !
давам и елементарния код ! http://pastebin.com/4HQLbNif

0
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Затваряш инпута с input.close(); след като си прочел входа който ти е нужен.

0
MarinPetrov avatar MarinPetrov 20 Точки

Здравей колега направих го но не се получва , а междодругото разбрах защо се получава така , всеки път когато затворя конзолата повече не иска да се покаже , а когато не я затворя си работи нормално ! Ако ли пък я затворя трябва да напиша някакъв елементарен код със събиране примерно на 2 числа рънвам я и чак тогава мога пак да я пускам , Нещо тая Java не ми допада поне засега ! Особено форматирания изход е къде ,къде по измъчен от този на C# ! Явно и аз правя грешки сега го карам на проба грешка , кофти е еклипса няма благинки като на VisualStudio ,но предполагам ,че за да се избере на него да пишем явно има някаква причина,поне ще се научим да си пишем кода сами не като забравим една точка и запетая и да си блъскаме главата що не иска да работи!

0
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Click Виж това може би ще реши проблема ти.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.