Софтуерно Инженерство
Loading...
+ Нов въпрос
Simooo93 avatar Simooo93 81 Точки

[Homework] Java Syntax

Здравейте колеги,

хайде да обсъдим и новото домашно. За мен лично най-трудната задача беше тази с форматирането, просто не ми се получиха нещата с добавянето на нули като ляв падинг при бинарното число. Пробвах доста варианти от stackoverflow, но никой не стана. Накрая си свалих външна библиотека guava и тя направи чудото. 

В домашното на 12-та задача стринговете Gosho и Pesho са равни на = 53253, а не, както беше дадено в примера по-голямо число, смятах го и на калкулатор отделно така, че не разчитам само на собствената си програма, за да казвам, че има грешка по домашното.

Java ми става все по-интересна и доста ми хареса регекса while(matcher.find())  доста по-лесно отколкото в c# match.Success после match.MoveNext() или там, както беше.

Надявам се и да видя свястно решение на 7-ма, че моето е малко хакнато, просто не намерих как се ползва рандом с долна и горна граница, каkто при c# и ако може някой да ми отговори на следните въпроси:

Някой може да ми каже в java кое замества @, за да не избягвам всеки символ по отделно ?

В github тази папка out/production трябва ли ми или да я махам ? 

Задачите: 

01. Rectangle Area

02. Triangle Area

03. Formatting Numbers

04. Calculate Expressions

05. Convert from decimal system to base-7

06. Convert from base-7 to decimal

07. Randomize numbers from N to M

08. *Odd and Even Pairs

09. *Hit the Target

10. Extract words

11. Starts and Ends With Capital Letter

12. Character Multiplier

13. Get First Odd or Even Elements

14. ***Magic exchangeable words

Тагове:
7
Java Advanced 15/10/2015 14:49:30
cap7ainjack avatar cap7ainjack 20 Точки

Здрасти,

само да попитам: Кога успя ??? :)

 

1
15/10/2015 11:50:49
Simooo93 avatar Simooo93 81 Точки

Хаха, еми реших да не ги бавя много :) 

2
Nedio90sz avatar Nedio90sz 1 Точки

видях че има срок за качване на домашните .. в профила на СофтУнито. След като изтече имам ли право да качвам домашни ?

0
Rado_tornado avatar Rado_tornado 8 Точки

За жалост не.

0
yanchev_i avatar yanchev_i 16 Точки

Здрасти, ето ги моите решения (без последната 14-та задача) тук.

3
djc_bg2015 avatar djc_bg2015 922 Точки

Някой може да ми каже в java кое замества @, за да не избягвам всеки символ по отделно ?

http://stackoverflow.com/questions/10056183/java-ignore-escape-sequences

;)

В домашното на 12-та задача стринговете Gosho и Pesho са равни на = 53253, а не, както беше дадено в примера по-голямо число, смятах го и на калкулатор отделно така, че не разчитам само на собствената си програма, за да казвам, че има грешка по домашното.

Напълно си прав.

Надявам се и да видя свястно решение на 7-ма, че моето е малко хакнато, просто не намерих как се ползва рандом с долна и горна граница, каkто при c#

Мисля , че това е правилния подход, поне аз това намерих и з нета и използвах за решение.

 

Поздрави!

 

2
15/10/2015 18:26:21
supersane avatar supersane 233 Точки

Здрасти, приятел! Аз успях да направя задачата с форматирането без да ползвам нищо външно, или поне си мисля, че работи, както трябва де. Това е кода, който я реализира. Колкото до 7ма, видях твоето решение, но ми се вижда май доста сложно, аз написах това, за 7ма и мисля, че си работи. Ще се радвам да хвърлиш един поглед на моите решения и да изкажеш мнение :) Иначе аз още се опитвам да измисля 14та, но не искам да отварям твоето решение поне засега ами да си понапъна още малко мозъка и да я направя сам. По-късно ако измисля собствено решения ще го постна, за да сравним. :)

2
Simooo93 avatar Simooo93 81 Точки

Ами това форматиране при мен не сработи :D 

Иначе за 7-ма моята е същата като твоята просто вместо да правя if - else първо с Мath.max вадя по-голямото от двете и го правя само с един цикъл и другото, което е че въртя един while цикъл, който не дава на рандома да ми хвърли число, което вече съществува в списъка, тоест застраховам се от повторения. Не съм пробвал твоята програма, но или рандома си има някакви вътрешни преобразувания, че да не връща еднакви числа или в твоята програма има риск списъка ти да се напълни с еднакви числа :) 

2
supersane avatar supersane 233 Точки

Прав си, иначе, аз не съм сложил проверка да не дава вече генерирано число, евала :)

0
enevlogiev avatar enevlogiev 1169 Точки

Всичко супер, но 14-та задача при вход ccdd aaaa връща true. Близо си като логика, само още една проверка трябва.

При аааа ccdd ще върне false, което е и вярното, надявам се това те насочва какво още да провериш : )

----

Оправена е грешката в примера за Гошо и Пешо, благодаря : ) Наистина дава 53253

1
15/10/2015 20:12:31
biser.stoev avatar biser.stoev 57 Точки

Ето и моето решение на 14та за малко разнообразие: http://pastebin.com/C0kSYcQ7

П.С. Още не съм свикнал да ползвам scanner.Next и по навик си пиша като на C#, затова и тук съм сплитвал.

0
supersane avatar supersane 233 Точки

Здравейте, аз не ползвам все още github и не си качвам никъде домашните, но понеже си поблъсках главата бая за последната задача, а другите ми се струват леснички, ще постна моето решение на въпросната последна задача, ще се радвам ако някой го отвори и разгледа за евентуални бъгове въпреки, че гледах да обходя "всички" ситуации. Също като колегата, Simooo93, използвах HashMap, но като видях кода му след това виждам, че се различават тук-там от логика решенията ни. Задачата беше наистина интересна и чесно казано, добре, че бях на курса по Структури от данни, иначе никога нямаше да се сетя да използвам HashMap, да не говорим, че и ако не бях ходил на курса нямаше даже да знам какво е HashMap или Dictionary, както беше в C#. Толкова с приказките ето го и решението.

ПС: Бях си оставил 12та за накрая, и понеже виждам, че ми се различава от на Simooo93, ето и моето решение. :)

2
16/10/2015 00:57:25
Simooo93 avatar Simooo93 81 Точки

Здравей, мисля, че задачата си работи правилно, но има някои оптимазиции, които направих тук. Това, което съм направил е да махна проверките при пълненото на hashmap-а, той си така или иначе запазва единствено уникални ключове, така че още 2 проверки са излишни. Тази променлива count не я ползваше никъде така, че я махнах. Също така този резултат беше излишен просто директно можеш да връщаш false при ситуация, в която не могат да се разменат, а ако всичкомине добре връщаш отдолу правилно. Така пак си спестяваш писане. Откъм логика сме подходили по един и същи начин просто аз ги проверявам още при вкарването в хаша, докато твоята програма първо пълни целия хаш и след това започва проверката. Другото, което кода не е добре разделен в методи, по-четливо и по-добре написано би било, ако имаш 2 метода единия за пълнене на хаша, а другия за размените на букви, а в момента метода ти за размени ти пълни хаша, което не е правилно.

Много красиво решение на 12-та :) 

Поздрави :)

1
16/10/2015 08:29:54
supersane avatar supersane 233 Точки

Добро утро, Симо! Съгласен съм с теб, че може кода да се раздели в 2 допълнителни метода, но сега разгледах къде си преправил и някое от проверките, които си махнал с цел оптимизация кара програмата да гърми при подаване на вход string1 = ccdd; string2 = aaaa; При тези данни програмата трябва да казва false, а всъшност казва true, затова бях добавил допълнителните проверки. Току що тествах твоята 12та, която също дава true при ccdd aaaa. Разгледай проверките, които бях сложил и пиши да кажеш. Иначе благодаря за 12та :)

1
Simooo93 avatar Simooo93 81 Точки

Абсолютно си прав! Ще си оправя задачата по-късно днес, радвам се, че си погледнал :) 

1
kiret0 avatar kiret0 6 Точки

Здравейте, колеги ето ги и моите задачи тук. Надявам се да съм се справил по-добре от предното домашно, относно медоти и т.н :D

2
Simooo93 avatar Simooo93 81 Точки

Лично решенията, които видях доста ми хареса, написал си ги много добре. На 7-ма добре си се сетил да използваш сет, аз правя проверки до полуда в моята :D

1
supersane avatar supersane 233 Точки

Наистина много хубаво решение за 7-ма!

0
kiret0 avatar kiret0 6 Точки

Благодаря, ако знаете пак аз колко го търсех с кое точно трябва да е, бая време и отделих :D

1
msmilkoff avatar msmilkoff 344 Точки

Преобразуването от седмична в десетична може да стане и с прост алгоритъм, който може да се имплементира за преобразувания между всякакви бройни системи:

Scanner scanner = new Scanner(System.in);

        int number = scanner.nextInt();
        String numberToString = Integer.toString(number);

        if (numberToString.contains("7") || numberToString.contains("8") || numberToString.contains("9")){
            System.out.println("Invalid input: Input number must be to base 7!");

            return;
        }

        int numberToBaseTen = 0;
        for (int i = 0; i < numberToString.length(); i++){
            int remainder = number % 10;
             numberToBaseTen += remainder * Math.pow(7, i);
             number /= 10;
        }
        System.out.println(numberToBaseTen);

2
Dargo avatar Dargo 44 Точки

int numberToBaseTen = Integer.parseInt(numberInBaseSeven,7); мисля, че тоя вариант е по-лесен и удобен за ползване :)

Поздрави

1
biser.stoev avatar biser.stoev 57 Точки

Здравейте, защо при споделените решения на втора задача автоматично някак си ако отговора е отрицателно число премахва минуса,а при мен не го прави. код: http://pastebin.com/i3RTJELh

Също така гледам, че при решенията на хората всички взимат всяко число на нов ред, а в условието инпута показва, че трябва от един ред да вземем две числа. Аз ли бъркам нещо или? Друго което забелязах е, че никой не проверва дали точките формират триъгълник.

И имам едно последно питане: има ли го това чудо от CSharp в Java: int[] numbers = Console.ReadLine().Split(" ").Select(int.Parse).ToArray() или трябва винаги първо да бъде масив от стрингове и после ръчно да го преобразувам?

0
Simooo93 avatar Simooo93 81 Точки

Здравей,

1. За да премахне минуса трябва да използваш Math.abs(area). 

2. Аз чета nextInt() така че независимо как ми ги вкара, дали на един, или на два реда няма значение.

3. Toчките не проверявам дали образуват триъгълник, защото те не образуват само, ако са на една линия, а пък тогава по формулата смята лицето като 0. А в нашата задача е записано, че ако не може да се образува триъгълник трябва да изпишем 0. Тоест няма смисъл от допълнителни проверки.

4. В Java няма LINQ, но има допълнителна библиотека, която предлага подобна функционалност lambdaj. 

Поздрави,

Симеон

2
biser.stoev avatar biser.stoev 57 Точки

Мерси много за обясненията, още ми е малко необятна javata :D. Но като гледам ти се справяш доста добре, та ако не те затормозявам имам още един въпрос. Стигнах до 13та задача и уж всичко е както трябва, но като ми отиде в метода за дадените елементи стига до if type == XXXX и ги прескача и двата варианта. Дебъгвам сигурно вече 1 час, пробвах различни неща като да ползвам листове и да принтирам всичко накрая, мислейки, че е защото направо принитирам, но уви не е това...

Ето кода:http://pastebin.com/tVykPkeW

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

0
17/10/2015 01:25:57
Simooo93 avatar Simooo93 81 Точки

За сравнение на стрингове използвай type.equal("odd") така ще сравни действителност стойностите докато като кажеш type == "odd" връща дали референцията е същата и понеже type ти идва от масива commands всъщност има различна референция :)

3
IvelinTenev avatar IvelinTenev 49 Точки

Не отпечатвай нищо в конзолата преди input-a. Това чупи тестовете в Judge.

Поздрави,

Иво

0
biser.stoev avatar biser.stoev 57 Точки

Прав си, но това не е джъдж. Особено за домашни според мен е по-добре, защото може просто човекът на когото проверяваш домашното да го е написал по различен начин.(прави проверката по-лесна).

0