Професионална програма
Loading...
+ Нов въпрос
lapd87 avatar lapd87 103 Точки

[LAB] Encapsulation - Problem {2} - Salary Increase

Колеги нещо не ми минава втори тест, ама аз ли съм тъп нещо...  Видях от видеото че подават кофти число и формата трябва да го има впредвид, но пак не става. Реално пробвах и %s на double като и то не минава на втори тест.

String.format("%s %s gets %s leva", this.firstName, this.lastName, this.salary)

# би трябвало да са колкото на Иво, ако съм броил правилно от екрана, но и с повече не стана...

public void increaseSalary(Double bonus) {

        if (this.age < 30) {
            bonus /= 2.0;
        }

        this.salary *= 1 + bonus / 100.0;
    }

    @Override
    public String toString() {
        return String.format("%s %s gets %s leva",
                this.firstName,
                this.lastName,
                new DecimalFormat("#.0#############################")
                        .format(this.salary));
    }

 

Качвам целия код дано някой вижда грешка някъде.

https://pastebin.com/63i3Sq96 - main class

https://pastebin.com/uC86NVUE - person class

Тагове:
0
Java OOP Basics 18/06/2018 19:52:53
Tanasis avatar Tanasis 39 Точки

Не трябва ли вместо 0-личката, която имаш да сложиш # ?

0
lapd87 avatar lapd87 103 Точки

Не, по условие ако е цяло число трябва да има 0.

Asen Ivanov gets 2640.0 leva
0
Tanasis avatar Tanasis 39 Точки

Aко пробваш с %.f  може би ?

-1
lapd87 avatar lapd87 103 Точки

Не, защото 12.000000000000000002 трябва да си излезе цялото.

виж видеото ако искаш около 01:38:00

https://youtu.be/Lr5v0vvODi0

0
Ivelin_Dimitrov avatar Ivelin_Dimitrov 148 Точки

Ами предполагам, защото отпред трябва винаги да има поне eдин знак преди дeсeтичната запетая, не трябва да е #, a трябва да имаш пак 0. Това е което работи при мен колега 

public void increaseSalary(double bonus) {
   double personalBonus = this.age >= 30 ? bonus : bonus / 2;
   this.salary += this.salary * personalBonus / 100;
  }

@Override
public String toString() {
   DecimalFormat df = new DecimalFormat("0.0#################");
   return String.format("%s %s gets %s leva", 
           this.getFirstName(), 
           this.getLastName(), 
           df.format(this.getSalary()));
    }

 

0
18/06/2018 20:25:40
Ivelin_Dimitrov avatar Ivelin_Dimitrov 148 Точки

Странно, но не намирам разлика със моето решиние, със изключение на 1% разлика във синтаксиса.... Гледах я ред по ред, ако искаш и ти погледни

https://pastebin.com/7CGX1P7j

1
lapd87 avatar lapd87 103 Точки

Мерси колега. Сигурно не си рефрешнал да видиш отговора ми :) този 1% разлика се оказва решаващ :D

0
lapd87 avatar lapd87 103 Точки

Така колеги оправих се.

Явно ***** грешка беше в това че формулата ми на изчисление е различна от тази в условието. Т.е. се получава разлика от грешката на double при различните операции и то в края. Моята и тяхната формула са математически еднакви, но double получава различни резултати в последните знаци.... 

2
Ivelin_Dimitrov avatar Ivelin_Dimitrov 148 Точки

готин хинт, нещо такова може здраво да ти скъса нервите :)

0
vonrepiks avatar vonrepiks 6 Точки

Както показахме днес на упражнението винаги когато искате да работите с проценти например да извадите 60 % от нещо формулата е следната: price - ((price * 60) / 100), като 60 са процентите, а накрая винаги трябва да се дели на 100.

1
lapd87 avatar lapd87 103 Точки

Да видях го :)

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

П.С. Радвам се че започнахте да гледате и форума не само ФБ :)

0