Loading...
magdalena70 avatar magdalena70 96 Точки

[Homework] Java Basics - Syntax - September 2014

Имам питане относно 4та задача от домашното- The Smallest of 3 Numbers.

От примерите,които са дадени,при изхода има нещо,което не разбирам:

Ако въведем цифрите 5  2  2 ,полученият резултат е 2,но понеже има и примери с дробни числа,

аз съответно използвам тип double и това ми връща резултат 2.0 вместо 2.Ако използвам Math.round(),

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

а при 2.5 -> да извежда 2.5?

Тагове:
4
Java Advanced 09/09/2014 21:41:16
veselinsavov avatar veselinsavov 219 Точки

Ето и от мен едно по-различно решение на 8 задача. >ТУК<


2
09/09/2014 01:43:16
Filkolev avatar Filkolev 4482 Точки

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

0
veselinsavov avatar veselinsavov 219 Точки

@Filkolev, преди моя пост нямаше такова решение, мерси за препоръката :)

0
VNikolov avatar VNikolov 51 Точки

Ето ги и моите решения на всички задачи - Java-Syntax-HomeworkНе съм ползвал никакви външни библиотеки за генерирането на SVG на последната задача, но и така се получи.

2
09/09/2014 09:18:52
Batanasova avatar Batanasova 8 Точки

Здравейте,

срещам затруднения с т.нар форматиращ низ  в Java. Четох книгата, гледах примерите и все пак още не мога да си обясня някои от нещата. Като например кога е нужно  да се ползва „$“? Има и един пример в книгата, при който не откривам каква е ролята на 10-ката.

System.out.format(Locale.ITALIAN,"%-10.4f%n%n", pi); // --> "3,1416"

Като цяло тези форматиращи низове в Java са ми пълна мъгла. Ако някой е по-запознат ще се радвам да сподели.

Благодаря предварително за отговора J 

0
verito898 avatar verito898 265 Точки

Ето линк с доста голяма част от тях : http://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html

System.out.printf("%1$tA %1$td.%1$tm.%1$tY",current); това е пример за форматиращ низ . Принтира 1во деня , a после датата(пр. четвъртък, 09.09.2014)

1$ задава на всички форматиращи низове да използват само 1вата стойност , която при мен е current , ако беше 2$ щеше да използва втората стойност след кавичките .  Самият % се явява нещо като плейсхолдер и винаги се пише при форматиращите низове . .. tA,tD ,tY предполагам ти е ясно какво правят  . Най-добре разгледай линка , който съм дала и обърни внимание на 6та задача formatting numbers от java syntax  и я помъчи или разгледай решения- http://pastebin.com/JdGWccC6

 

2
a.angelov avatar a.angelov 1316 Точки

Здравей,

$ се ползва, когато искаш да укажеш коя от променливите изброени след форматиращия низ искаш да използваш - примерно 1$, 2$ и т.н. Тоест ако във форматиращия низ използваш на n места една и съща променлива не е необходимо да я изписваш n пъти след форматиращия низ. Ако променливата е на второ място съответно я означаваш с 2$ и т.н.

Пример: 

System.out.printf("%1$td/%1$tm/%1$tY %1$tH:%1$tM", LocalDateTime.now());

По примера, който си цитирала:

"%-10.4f%n%n", pi

- /минус/ това е флаг, който означава ляво подравняване /без минуса подравняването е дясно/;

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

.4f - означава че променливата, която ще се изпише е floating-point и следва да се изпише с точност до четвъртия знак след запетаята.

%n - нов ред /отброява символите въведени преди него - не връща output: така е било в по-стари версии.../.

Може да прочетеш повече за форматирането и тук:

http://sharkysoft.com/archive/printf/docs/javadocs/lava/clib/stdio/doc-files/specification.htm

3
09/09/2014 13:42:15
Filkolev avatar Filkolev 4482 Точки

Ще опитам накратко да ти направя съпоставка със C#. Надявам се с плейсхолдърите там да си по-наясно.

%1$ -> аналогично на {0}; %3$ -> {2} - указва ти кой по ред параметър от подадените след това да се сложи вътре, защото по подразбиране се взимат всички по ред, т.е. ако искаш един параметър да изпишеш два пъти трябва да ползваш доларчето. Различното е, че индексацията започва от 1...

-10 и .4f са флагове.

-10 е подравняване, т.е. %-10 е аналогично на {0, -10}. Това май беше ляво подравняване, а ако няма минус - дясно. 

.4f е форматиране на реално число (f указва типа, floating-point) до определен брой знаци след десетичния знак - аналогично на {0:F4}. 

%n e нов ред, аналогично на \n, но във форматиращия низ на джава се ескейпва с %. 

Ако пък искаш да напишеш % например на конзолата трябва да го ескейпнеш с %%, аналогично на \\.

3
09/09/2014 13:36:45
samuanne avatar samuanne 6 Точки

Моите решения. На 7 и 8 задача не се сетих за по-умни имена на променливи, пък и вече бях изпушил. Критиките са задължителни!!

Problem 1. Rectangle Area
Problem 2. Triangle Area

Problem 3. Points inside a Figure
Problem 4. The Smallest of 3 Numbers

Problem 5. Decimal to Hexadecimal

Problem 6. Formatting Numbers

Problem 7. Count of Bits One

Problem 8. * Count of Equal Bit Pairs

Problem 9. ** Points inside the House

Problem 9. *** TO/DO

0
09/09/2014 13:44:30
Filkolev avatar Filkolev 4482 Точки

За 7-ма задача има готов метод в джава за броене на единиците :)

За 8-ма, по-лесно е ако си дефинираш маска = 3 (11 в двоична система). Хващаш си числото, правиш му number & mask, ако резултатът е 0 значи имаше две нули най-отзад, ако резултатът е 3 значи имаш две единици => увеличаваш си брояча. След това почваш да местиш числото надясно с единица. Аз го правя в прост while цикъл докато числото не стане 0, не се налага така да се проверява къде точно е последният, най-ляв бит.

0
BoYaN avatar BoYaN 336 Точки

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

Това са решенята на задачите от домашното "Java Syntax".

_01_RectangleArea
_02_TriangleArea
_03_PointsInsideFigure
_04_SmallestOf3Numbers
_05_DecimalHexadecimal
_06_FormattingNumbers
_07_CountOfBitsOne
_08_CountEqualBitPairs
_09_PointsInsideHouse

Можете да посетите блога ми, където съм се опитал да обясня как съм стигнал до тях и как съм изкопирал някои неща (предимно математическите формули) наготово. Както обикновено всеки коментар, препоръка и/или критика са добре дошли.

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

Препоръчвам на всички да почвате леките задачки от изпита (1-ва и 2-ра), че тая седмица ще ни сипят бая материал за учене:

  • един леген цикли, класове и методи
  • с голямата кофа - колекции (масиви, листове, мапове)
  • TeamWork 

Поздрави

0
magdalena70 avatar magdalena70 96 Точки

Мисля,че на 9 задача-"Points inside the House"-редът от условието:

"The point is given as a pair of floating-point numbers, separated by a space."-

означава,че стойностите на X и Y се въвеждат от един ред,разделени с интервал.

Поне аз така го разбирам.

Ето и моите решения Java-Syntax-Homework

 

За 9 задача-точка D е с координати от въведените от потребителя X и Y.Ако сбора от лицата на новополучените три триъгълника е равен на лицено на дадения покрив,значи е true.За по-коректно,трябваше да ги разделям на 2,но е същото.

1
10/09/2014 18:39:48
BoYaN avatar BoYaN 336 Точки

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

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

От коментарите по кода на колежката magdalena70, горе-долу схванах, че смята лицето на целия триъгълник и после се сравнява с някакви други лица на някакви триъгълници ама какво точно се случва не мога да разбера, знам само, че работи.

0
10/09/2014 17:43:15
XoPxE avatar XoPxE 1 Точки

По простичко обяснение: имаш точка А и точка В ( приемаме че точка В е с по голяма Х координата),  имаш 3 варианта:

1. (Bx-Ax)*(Y-Ay) - (By-Ay)*(X-Ax) = 0 --> точката лежи върху линията.

2. (Bx-Ax)*(Y-Ay) - (By-Ay)*(X-Ax) > 0 --> точката е под линията.

3. (Bx-Ax)*(Y-Ay) - (By-Ay)*(X-Ax) < 0 --> точката е над линията.

Забележка 1. За хоризонтална линия под линията и над линията са ясни :)

Забележка 2. За наклонена или вертикална линия просто завърти мислено по часовниковата стрелка линията около точка А (тази с по малката Х координата) до хоризонтално положение --> виж Забележка 1.

1
anton_mironov avatar anton_mironov 19 Точки

Относно задача _04, аз лично си сложих една проверка, дали числото е целочислено, или не.След това му казваш как да ти го изведе:

if(a < b && a < c)
      {
         if(a%1 == 0)
         {
             System.out.println((int)(a));
         }
         else if (a%1 !=0)
         {
             System.out.println(a);
         }

и така за b и за c

1
10/09/2014 12:57:22
Angel_D avatar Angel_D 0 Точки

Относно 4-та задача - по принцип кода ми работи с положителните числа, но като пробвам да тествам с примерите с отрицателните числе, още при въвеждането излиза грешка java.util.InputMismatchException - предполагам трябва да се импортне но какво ....

....открих го - Locale.setDefault(Locale.ROOT); 

0
13/09/2014 03:04:10
Dopey avatar Dopey 7 Точки

Ето и моите решения GitHub последната е до половината :)

 

1
a.polyanska avatar a.polyanska 107 Точки

И аз имам питане по домашното- задача 8, да се преброят чифтовете еднакви битове. Опитвам се да измъкна бита от определена позиция (от 31 до 0 ). Правя го с повдигане на 2 на степен позицията & числото. Някъде, обаче очевидно греша, може би в синтаксиса (в C# го правех точно по този начин и винаги е работело). Изкарала съм бинарния код, отпечатан на конзолата, за да се види по-добре грешката. Моля, ако някой има идея къде е грешката, да казва :) Ето кода:

import java.util.Scanner;

public class Problem08_CountEqualBits {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n;
        int bit;
        int nextBit;
        int count = 0;
        String str;
        String next;
        
        System.out.print("n= ");
        n = input.nextInt();
        
        for (int i = 32; i >= 1; i--) {
            bit = (int) Math.pow(2, i); //& n);
            System.out.printf("%s", Integer.toBinaryString(bit));
            bit = bit & n;
            //================
            str = Integer.toBinaryString(bit);
            System.out.println(str);
            //=========================
            nextBit = ((int)Math.pow(2, i-1) & n);
            //================
            next = Integer.toBinaryString(nextBit);
            System.out.println(next);
            //=========================
            
            if ((bit == 0 && nextBit == 0) || (bit != 0 && nextBit != 0)) {
                count++;
            }
        }
        System.out.printf("Equal bit pairs are: %d", count);
    }

}

0
11/09/2014 00:27:24
a.angelov avatar a.angelov 1316 Точки

Първо да помоля да качваш кода в сайтове като pastebin или github, както е по правилата.

Второ - защо не намираш бита по лесния начин с маска?

Тоест ако търсиш n-тия бит на числото number, трябва да направиш така:

int mask = 1 << n;

int numberAndMask = number & mask;

int bit = numberAndMask >> n;

Може да се напише и на един ред: 

int bit = (number & (1 << n)) >> n;

 

Друга препоръка - вместо да въртиш 32 цикъла, може да направиш един while цикъл с проверка дали number е = 0 и при всяка итерация да изместваш побитово number надясно с един бит - number >> 1. Вътре в цикъла проверявай винаги най-десния бит - тоест правиш побитово & с 1. Или кодът би изглеждал така:

while (number > 0) {

    int bit = number & 1;

    .

    .

    .

    number = number >> 1;

}

 

Ето моите решения на двете задачи с битове от домашното:

Count of bits one

Count of equal bit pairs

И също така има метод в java, който директно връща брой на битовете 1 в числото:

Integer.bitCount(number) smile
0
11/09/2014 08:47:08
a.polyanska avatar a.polyanska 107 Точки

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

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

Иначе благодаря за подсказките и идеите!

0
SStoyanov22 avatar SStoyanov22 39 Точки

Здравейте, колеги!Не виждам нужда да показвам всичките задачи, тъй като решенията ми са подобни на останалите колеги, но реших 9 задача с добро и кратко според мен решение. Ето го и него: http://pastebin.com/vGpyDRtdd

2
Slav.Slavchev avatar Slav.Slavchev 25 Точки

Просто БРАВО! Не се загледах изобщо за сбора от x + y. :)

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