Loading...
denitsadudinska avatar denitsadudinska 0 Точки

Java Basics

Зд,авейте,

Може .и някой да ми помогне с тази задача?

1. Да се състави масив от 10 елемента от тип Person.
2. Да се създадът по два обекта от тип Person, Student и Employee и да се вкарат в масива от хора.
3. Да се обходим масива и в зависимост от това дали обекта е от
тип Person, Student или Employee да се извика съответно метода
showPersonInfo, showStudentInfo или showEmployeeInfo.
4. Да се обходи още веднъж масива с хора и за всеки човек, който е работник, да се изведе на екрана сумата, която му се дължи при 2 часа работа извън работно време.

 

 

 

Тагове:
-1
Programming Basics with Java
denitsadudinska avatar denitsadudinska 0 Точки

Благодаря виж до къде съм я докарала.

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

https://pastebin.com/6uR23NNe

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

0
Ivelin_Dimitrov avatar Ivelin_Dimitrov 148 Точки

можеш ли да ми пратиш линк за условието да го погледна? Ако разбирам добре условието, както колегата ти е казал, Person трябва да ти е базов клас - 

public abstract class Person { TODO... }

другите класове Student и Employee ще са негови наследници - public class Student extends Person { TODO.. } и същото за Employee class. Методите за инфо трябва да са във съответните класове, аз бих ги направил със 

@Override
public String toString() {
    TODO...
}

но можеш да си ги направиш както ти е по условие защото понякога ти проверяват методите.

Понеже Person е abstract class, не можеш да създадеш инстанция на този class, но можеш да имаш инстанций на неговите наследници. (във твоят код пълниш масив от Person със инстанции на class Person -> new Person("Peter", 0, false) това ме навежда на мисълта че Person не ти е абстрактен клас)

примерна инстанция на наследник - Person person = new Student() 

Така можеш да създадеш масив от Person и да го пълниш със всичките негови наследници. И да си го обхождаш лесно със един foreach (за InteliJ напиши "iter" и натисни enter)

for (Person person : yourArr) {
    person. TODO...
}

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

 

0
11/02/2018 00:00:44
denitsadudinska avatar denitsadudinska 0 Точки

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

Наследяване на класове. Идентификатори за достъп.
Използване на ключова дума super.
Задача за домашно:
Да се направи иерархия от класовете Person, Student и Employee
Класът Person репрезентиращ човек да има следните
Полета:
– name - име
– age - години
– isMan - поле, показващо пола
Коструктори:
– Единствен конструктор, с параметри за всичките полета на класа
Метод:
– Метод showPersonInfo, който показва информация за човека
(изписва на конзолата стойността на всичките му полета по
подходящ начин)
Класът Student наследяващ Person, репрезентиращ ученик да има
Полета:
– score - показва оценката на ученика (число между 2 и 6, не е
задължително да е цяло)
Единствен конструктор:
– Student(String name, int age, boolean isMan, double score)
задаващ стойности и на наследените полета
www.pragmatic.bg
Метод showStudentInfo() който показва информация за човека и
информация за оценката му (чрез надписи на екрана)
Класът Employee да наследява Person и да дефинира:
Полета:
– daySalary показва дневната заплата на работника
Конструктор които инициализира всичките му полета (собствени и
наследени)
Методи:
В случай че на работник се наложи да работи извън работно време,
на него му се дължи допълнителна сума пари (overtime) за часовете които
е работил. Сумата се пресмята по следния начин: ако работника, няма
навършени 18 години, дължимата сума е 0. В противен случай, за всеки
отработен час, на работника се заплаща сумата която получава на час
(зависи от дневната заплата) умножена по 1,5.
– метод calculateOvertime(double hours) който пресмята и връща
стойността на сумата която му се дължи при работа извън работно
време
– метод showEmployeeInfo(), който показва информация за човека,
както и информация за дневната му заплата
Да се напише и демонстративен клас с main метод в който:
1. Да се състави масив от 10 елемента от тип Person.
2. Да се създадът по два обекта от тип Person, Student и Employee и да се вкарат в масива от хора.
3. Да се обходим масива и в зависимост от това дали обекта е от
тип Person, Student или Employee да се извика съответно метода
showPersonInfo, showStudentInfo или showEmployeeInfo.
4. Да се обходи още веднъж масива с хора и за всеки човек, който е работник, да се изведе на екрана сумата, която му се дължи при 2 часа работа извън работно време.

0
Ivelin_Dimitrov avatar Ivelin_Dimitrov 148 Точки

Струва ми се по логично Person да е абстрактен клас, но във случаят ако разбирам добре условието, те искат да имаш инстанции и на класът Person... Може би чрез проверки със помоща на reflection, нещо от сорта на

class Main - https://pastebin.com/mGd8pQHw

class Person - https://pastebin.com/Qg9pTS4B

class Student - https://pastebin.com/fzs9G3SX

class Employee - https://pastebin.com/xsbkz8UV

person.getClass().getName() връща името на класът обаче включително със пакетите, примерно com.company.Student com и company са пакетите Student е класът, и за да проверя само класът добавям .endsWith("ClassName") 

Погледни този линк ако си по любопитна: https://docs.oracle.com/javase/tutorial/reflect/index.html

Не казвам, че е най умно :) но това ми идва на акъла и работи за дадената задача. Ако имената на методите за информация бяха без значение, ще напишеш един метод showInfo във class Person и във останалите ще го преизползваш със @Override като го пренапишеш за съответният клас. Така за първото обхождане на масивът ще извикаш просто person.showInfo();  без до се интерисуваш от типа на инстанциите

0
11/02/2018 18:48:00
denitsadudinska avatar denitsadudinska 0 Точки

Здравей,

 

Огромно благодаря за решението. Не разбирам какави са тези символи, които са в болд.

public void showPersonInfo() {
        System.out.println(String.format("Name: %s%n" +
                "Age: %d", this.name, this.age));
        if (isMan) {
            System.out.println(String.format("Sex: male%n"));
        } else {
            System.out.println(String.format("Sex: female%n"));
        }
    }

-1
Ivelin_Dimitrov avatar Ivelin_Dimitrov 148 Точки

Ами placeholders, %s e за String, %d е за int / long (decimal), %n е за нов ред, %f е за double / float

System.out.println(String.format("Name: %s%n" + "Age: %d", this.name, this.age)); --> %s е за стринга this.name, след което %n e за да продължи на нов ред, %d е за цяло число във случаят this.age


System.out.println(String.format("Name: %s%n" + "Age: %d", this.name, this.age));  ==

==  System.out.println("Name: " + this.name);     

      System.out.println("Age: " + this.age);  

 

Препоръчвам ти да разгледаш това: https://docs.oracle.com/javase/tutorial/java/data/numberformat.html

0
11/02/2018 23:02:41
denitsadudinska avatar denitsadudinska 0 Точки

Благодаря за цялата информация. Решението на задачата е супер, но далеч над моитe знания. За това се опитах да я пререша на база на това, което знам. За момента съм стигнала до тук.

https://pastebin.com/uBpzgG9J

https://pastebin.com/J9xR7NHH

https://pastebin.com/LnUxKjL2

https://pastebin.com/pzCSxwtv

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