powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / задача о персонале с фикс и повременной з.п.
70 сообщений из 70, показаны все 3 страниц
задача о персонале с фикс и повременной з.п.
    #39335373
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый всем день.

Пытаюсь освоить ООП и выбрал для этого JAVA. Поэтому просьба не пинать меня сразу :-)
посмотрел небольшой какой - то курс по ООП.

И захотелось реализовать какую-нибудь классическую задачку. Но тривиальные задачки на геометрические фигуры , животные и т.п. не интересно. И вот выбрал кое - что посерьезнее (правда это вопрос из собеседования на C#) . Итак, сама задача (возможно она знаменита) :

Построить три класса (базовый и 2 потомка), описывающих некоторых работников с почасовой оплатой (один из потомков) и фиксированной оплатой (второй потомок). Описать в базовом классе абстрактный метод для расчета среднемесячной заработной платы. Для «повременщиков» формула для расчета такова: «среднемесячная заработная плата = 20.8 * 8 * почасовую ставку», для работников с фиксированной оплатой «среднемесячная заработная плата = фиксированной месячной оплате».

a) Упорядочить всю последовательность работников по убыванию среднемесячного заработка. При совпадении зарплаты – упорядочивать данные по алфавиту по имени. Вывести идентификатор работника, имя и среднемесячный заработок для всех элементов списка.
b) Вывести первые 5 имен работников из полученного в пункте а) списка.
c) Вывести последние 3 идентификатора работников из полученного в пункте а) списка.
d) Организовать запись и чтение коллекции в/из файл.
e) Организовать обработку некорректного формата входного файла.

Если читать первую часть задания , то вроде как всё просто.
Описываем абстрактного предка с абстрактным методом GetSalary, в потомках описываем логику GetSalary в зависимости от класса: оклад ли там или повремёнка.
что-то вроде этого :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
package persony;
/*класс описывающий сотрудников на повременке*/

public class povremensh extends pers {
	
	 private static String name ;
	 private static int id ;
	 private static int time ;
	 private double salary ;
	 

	 public povremensh(int i, String name, int time) {
		
			this.name = name;
			this.time = time;
			
	}

	@Override
	double Get_Salary(float s) {
		this.salary=20.8 * 8 * s;
		 return this.salary;
	}
}

/*класс описывающий сотрудников на окладе*/

public class fix extends pers {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public fix(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name = name;
	}



	@Override
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}


	 
}


/*Класс предок****************************/
abstract class pers {
	
	   
	
	abstract  double Get_Salary(float s) ;
	

}

public class main  {
	public static void main(String args[]) {

		fix f = new fix(1, "Маша", 25000);
		povremensh p = new povremensh(2, "Коля", 14);

		
			}

}



Но вопросы начинаются с нюансов а - е.
Выясняется , что работников много и их хотят сортировать . исходя из этого выходит как - то так:
1) таким образом встаёт вопрос о том как хранить входные данные. Понятно , что это либо массив , либо список. Допустим даже это массив из 10 сотрудников(упростим).
2) получается, что абсолютно ВСЕ сотрудники должны находиться в одном экземпляре некоего класса (а о нём ведь в задании ни слова), который наверно будет потомком fix и povremensh (а java разве позволяет это делать ? ).
3) таким образом массив создаем в этом классе .

Короче я возможно написал и полнейший бред, но поясните как я тогда должен проектировать свои классы ? интересна сама инициализация.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335388
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
1) либо в памяти коллекция либо в субд.
2) зачем?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335391
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Классы именуются с заглавной буквы строго на английском языке.
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

Вам в коде не хватает вот этого:

Код: java
1.
2.
3.
pers[] employees = new pers[10];
pers[0] = new fix(1, "Маша", 25000);
pers[1] = new povremensh(2, "Коля", 14);
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335458
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81,

Классы именуются с заглавной буквы строго на английском языке.
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

Вам в коде не хватает вот этого:

Код: java
1.
2.
3.
pers[] employees = new pers[10];
pers[0] = new fix(1, "Маша", 25000);
pers[1] = new povremensh(2, "Коля", 14);


Спасибо за ответ.
Вы наверно вот так хотели написать ?
Код: java
1.
2.
3.
		pers[] employees = new pers[10];
		employees[0] = new fix(1, "Маша", 25000);
		employees[1] = new povremensh(2, "Коля", 14);



я наверно крайне невежественный в ООП. Но не понимаю как скажем в экземпляре "employees[0]" класса "pers" есть конструктор от класса fix, тогда как класс fix это наследник от pers , а не наоборот.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335466
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо.


Petro123andron81,
1) либо в памяти коллекция либо в субд.


ну коллекция это круто ещё и не смотрел я эту тему.
думаю СУБД тоже излишне в данной задачке. тут ведь речь идёт о файлах

А вот массивы в самый раз

Petro1232) зачем?


Затем что я так понимал, но из сообщения ниже понял, что действительно незачем :-)
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335580
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Вы наверно вот так хотели написать ?

Ну, да. Многопоточность дала сбой.

andron81я наверно крайне невежественный в ООП. Но не понимаю как скажем в экземпляре "employees[0]" класса "pers" есть конструктор от класса fix, тогда как класс fix это наследник от pers , а не наоборот.
Класс FixedPriceEmployee расширяет класс Employee.
Экземпляр FixedPriceEmployee является так же экземпляром Employee. Поэтому всё что может Employee может и FixedPriceEmployee.
Поэтому Employee e = new FixedPriceEmployee();

А вот конструкция
FixedPriceEmployee fpe = new Employee();
уже не допустима, потому что у FixedPriceEmployee могут быть методы, которые Employee не реализует. Просто сосредоточтесь и подумайте над этим. И переходите на внятные имена.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335796
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запутался я .
вы пишите :
BlazkowiczЭкземпляр FixedPriceEmployee является так же экземпляром Employee. Поэтому всё что может Employee может и FixedPriceEmployee.
Поэтому Employee e = new FixedPriceEmployee();


но в Employee нет конструктора FixedPriceEmployee()
конструкция Employee e = new FixedPriceEmployee(2, "Коля", 14); разве прокатит?

код переписал как вы хотели


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
abstract class Employee{
	
	   
	
	abstract  double Get_Salary(float s) ;
	

}



public class FixedPriceEmployee  extends Employee {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public FixedPriceEmployee(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name = name;
	}



	@Override
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}


	 
}
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335800
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и самое интересное , что да, работает.

но это я и не пойму .
вот этим мы создаём экземпляр e:
Employee e = new FixedPriceEmployee(2, "Коля", 14);

я думал , что Employee это предок FixedPriceEmployee , а значит потомок FixedPriceEmployee наследует теоретически всё от Employee.
(об этом свидетельствует строка public class FixedPriceEmployee extends Employee )
но никак не наоборот. Выходит класс "Employee" ничего не знает об "FixedPriceEmployee" , в том числе и о конструкторе FixedPriceEmployee.

а выходит нет - знает !
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335806
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
полиморфизм - один из китов ООП. Совсем рядом.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335811
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andron81,
полиморфизм - один из китов ООП. Совсем рядом.

да , но тут его не понимаю ))) не могли бы пояснить ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335892
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

https://www.youtube.com/user/pro100fox2/videos
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335894
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81и самое интересное , что да, работает.
Я бы на вашем месте, разобрался с тем почему так работает. Вы вместо этого пытаетесь натянуть свои фантазии на факты. А они не совпадают.

andron81Выходит класс "Employee" ничего не знает об "FixedPriceEmployee" , в том числе и о конструкторе FixedPriceEmployee.
а выходит нет - знает !
Нет, не знает. Почему вы решили то знает? Конструкторы это отдельная тема. Конструкторы FixedPriceEmployee явно и не явно вызывают конструкторы Employee.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335924
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЯ бы на вашем месте, разобрался с тем почему так работает. Вы вместо этого пытаетесь натянуть свои фантазии на факты. А они не совпадают.

с чего вы взяли , что я хочу пропустить эту тему ? я как раз хочу разобраться, а фантазии это то как я понимаю


BlazkowiczAndron81Выходит класс "Employee" ничего не знает об "FixedPriceEmployee", в том числе и о конструкторе FixedPriceEmployee.
а выходит нет - знает !

Нет, не знает. Почему вы решили то знает?


потому как вот это:
Employee e = new FixedPriceEmployee(2, "Коля", 14);
я понимаю так: грубо говоря "e" делаем типа класса "Employee". А после "=" начинаются непонятные моменты : делаем инициализацию FixedPriceEmployee(2, "Коля", 14). тогда как FixedPriceEmployee это метод не из Employee, а из класса FixedPriceEmployee. А класс FixedPriceEmployee это наследник Employee, а не наоборот, поэтому непонятно как мы можем применить этот метод из Employee.

то есть вот так было бы понятно:
FixedPriceEmployee e = new FixedPriceEmployee(2, "Коля", 14);
так как "e" мы делаем типом FixedPriceEmployee и поэтому можем в инициализации тут же вызвать метод FixedPriceEmployee(параметры)

а в случае Employee e = new FixedPriceEmployee(2, "Коля", 14)
в моём понимании мы делаем e типа Employee, но этот класс ничего не знает о существовании "FixedPriceEmployee"

Blazkowicz Конструкторы FixedPriceEmployee явно и не явно вызывают конструкторы Employee.

это я понимаю

на всякий случай привожу ещё раз код

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
abstract class Employee{
	
	   
	
	abstract  double Get_Salary(float s) ;
	

}



public class FixedPriceEmployee  extends Employee {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public FixedPriceEmployee(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name = name;
	}



	@Override
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}


	 
}
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39335955
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Employee e - это переменная, которая указывает на объект типа Employee.
new FixedPriceEmployee() - это конструктор, который создаёт новый объект типа FixedPriceEmployee.
Является ли объект типа FixedPriceEmployee так же объектом типа Employee? Да!
Значит переменная типа Employee может ссылаться и на вновь созданный объект.

Что в этой логике не понятного?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336033
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
Юмор люблю).
Я не пойму, это вы тестируете Blazkowicz или он вас? ))
Nixic вам дал ссылку. Вы её изучили?
Вникайте во всё что вам дают. А потом спрашивайте...не торопясь.
imho
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336146
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123
Nixic вам дал ссылку. Вы её изучили?


ок. беру паузу тогда
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336278
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

как раз парень и задаёт волнующий для меня вопрос на 39:30
http://www.youtube.com/watch?v=9GdtWiovvIQ&list=PLmqFxxywkatR3qNmxqcFIHF9MN2-_eteU
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336287
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Добавьте в ваш пример помимо getSalary методы уникальные для каждого типа.
И поэксперементируйте в IDE с тем как эти методы вызываются.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336289
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81,

Добавьте в ваш пример помимо getSalary методы уникальные для каждого типа.
И поэксперементируйте в IDE с тем как эти методы вызываются.
Все методы сделайте public, чтобы они были виртуальными.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336292
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81то есть берем FixedPriceEmployee и обращаемся с ним как Employee . таким образом
это и есть полиморфизм1
andron81получаем весь фарш Employee , но явным образом обращаться к FixedPriceEmployee мы уже не можем .
нечего не понял.
- в конструкторе наследника нужно вызывать супер класса конструктор.
- в коде в переменной суперкласса программа автоматом вызовет процедуру наследника.
Это полиморфизм2
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336295
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
    Foo(String str) { }
}

class Bar extends Foo {
    Bar(String str) {
        super(str);
    }
}
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336309
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andron81получаем весь фарш Employee , но явным образом обращаться к FixedPriceEmployee мы уже не можем .
ничего не понял.


я имел ввиду, что мы уже не можем обратиться к методам FixedPriceEmployee если их нет в предке.
ладно... проехали
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336334
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81я имел ввиду, что мы уже не можем обратиться к методам FixedPriceEmployee если их нет в предке.
ладно... проехали
- приведение типов если очень надо
http://ru.stackoverflow.com/questions/271985/Явное-приведение-типов
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39336969
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andron81я имел ввиду, что мы уже не можем обратиться к методам FixedPriceEmployee если их нет в предке.
ладно... проехали
- приведение типов если очень надо
http://ru.stackoverflow.com/questions/271985/Явное-приведение-типов

в такие дебри пока не лезу
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338327
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
2.
3.
pers[] employees = new pers[10];
pers[0] = new fix(1, "Маша", 25000);
pers[1] = new povremensh(2, "Коля", 14);




подскажите, а вот если мне нужно сортировать элементы я вынужден буду тупо общаться тогда с элементами своего массива посредством Get, Set-ов из метода Main ?
а есть ли другие способы ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338330
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

хотя возможно меня сейчас начнут жестко пинать , обвиняя в полном непонимании ООП , но я вот о чем :

если предположить , что метод employees не абстрактный, можно было бы организовать в нем такой метод который эту сортировку бы осуществлял, хотя возможно это полный бред , хотя вот в это я тоже с трудом поверил , что так можно , когда увидел :

Код: java
1.
pers[] employees = new pers[10];
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338368
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81подскажите, а вот если мне нужно сортировать элементы я вынужден буду тупо общаться тогда с элементами своего массива посредством Get, Set-ов из метода Main ?
а есть ли другие способы ?
Можно при помощи Comparator и Arrays.sort(T[] a,Comparator<? super T> c)
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338522
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевМожно при помощи Comparator и Arrays.sort(T[] a,Comparator<? super T> c)


ну то есть я могу создать метод Sorting внутри класса Employee в предположении, что Employee не абстрактный? (исходный код смотреть выше )
я просто не понимаю, если JAVA позволяет экземпляры класса (в нашем случае это Employee) создавать в виде элементов массива,
но тогда не укладывается в голове как мы можем организовать метод Sorting внутри класса Employee , который будет работать не только с текущим экземпляром , но и вмешиваться в другие. наверно это фантастика но это было бы идеальное решение . Хотя возможно это совсем недопустимо ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338525
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
По ООП уже придумали Списки
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338561
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andron81,
По ООП уже придумали Списки





совсем не пойму причем тут списки. я упростил задачу : свёл количество элементов к константе.
мне непонятна технология сортировки массива . Всё было бы ясно, если бы экземпляр содержал массив в качестве поля. но у нас элементы разбросаны по разным экземплярам каждый из которых будет содержать свой метод Sorting, тем не менее метод должен работать с группой экземпляров, но внутри одного метода, как так получается )))))))))))))))))

p.s. и не хочу пользоваться стандартными возможностями Comparator и Arrays.sort . хочу для понимания изобрести свой велосипед.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338580
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Всё было бы ясно, если бы экземпляр содержал массив в качестве поля
Если тупой массив, то - Да.
Т.к. вы добаляете функционал типа сортировки, то массив уже не годится.
Что тут непонятного?
andron81хочу для понимания изобрести свой велосипед.
Изобретайте - делайте наследник или помощник для массива. Но ОТДЕЛЬНЫЙ класс - список.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338609
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
по ООП, класс\бизнес-объект\бизнес-сущность внутри которого массив, сам не должен его сортировать.
Он только его может выдать. Например:
Код: java
1.
2.
Class_A.ДайЭлементМассива(номер)
Class_A.ДайМассив
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338614
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
второй вариант вычисления задачи - шаблон Визитор\Посетитель.
Он проходит по всем объектам и вычисляет зарплату.
Но это IMHO сложновато для вас будет на данном этапе.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338629
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123andron81Всё было бы ясно, если бы экземпляр содержал массив в качестве поля
Если тупой массив, то - Да.
Т.к. вы добаляете функционал типа сортировки, то массив уже не годится.
Что тут непонятного?


функционал сортировки я бы мог добавить в виде говнкода в методе main. но поэтому случаю я и спришваю если мы делаем так:
Код: java
1.
pers[] employees = new pers[10];



то с ваших слов выходит не представляется возможным спрятать логику сортировки в класс employees в виде метода - если так то оно понятно. Однако это выйдет если мы организуем экземпляры не как элементы массива, а как список.
Верно ?

Petro123andron81хочу для понимания изобрести свой велосипед.
Изобретайте - делайте наследник или помощник для массива. Но ОТДЕЛЬНЫЙ класс - список.

последнее предложение ваше про отдельный класс-список поясните, пожалуйста .
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338640
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81то с ваших слов выходит не представляется возможным спрятать логику сортировки в класс employees в виде метода - если так то оно понятно. Однако это выйдет если мы организуем экземпляры не как элементы массива, а как список.
Верно ?
можно и навесить на employees, если это конец задачи. Если не конец и employees - безнес сущность, то лучше в employees иметь помощника в виде умного класса-массива под именем "Список" (List)
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338641
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда будет:
Код: java
1.
2.
3.
- Сотрудники - создать объект
- Сотрудники.ДобавитьПолиморфноСотрудника(абстрактныйКласс)
- Сотрудники.Сортировать // сортирует не сам
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338649
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123тогда будет:
Код: java
1.
2.
3.
- Сотрудники - создать объект
- Сотрудники.ДобавитьПолиморфноСотрудника(абстрактныйКласс)
- Сотрудники.Сортировать // сортирует не сам



да, тяжко для меня : вот это "абстрактныйКласс" вынос мозга )))))
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39338651
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
авторУ некоторых читателей может возникнуть вопрос: зачем нам коллекции, если у нас есть массивы ? В самом деле, многие используют коллекции там где нужно и не нужно.
http://www.quizful.net/post/Java-Collections

andron81да, тяжко для меня : вот это "абстрактныйКласс" вынос мозга )))))
делай по шагам.
У тебя же в коде он есть - базовый.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339337
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81Вы наверно вот так хотели написать ?

Ну, да. Многопоточность дала сбой.

andron81я наверно крайне невежественный в ООП. Но не понимаю как скажем в экземпляре "employees[0]" класса "pers" есть конструктор от класса fix, тогда как класс fix это наследник от pers , а не наоборот.
Класс FixedPriceEmployee расширяет класс Employee.

да. не спорю
andron81Экземпляр FixedPriceEmployee является так же экземпляром Employee. Поэтому всё что может Employee может и FixedPriceEmployee.

да. может я не так вопрос ставил ?
смотрите
Employee e = new FixedPriceEmployee();

выражение слева от "=" означает , что резервируется переменная e с типом Employee, то есть под экземпляр класса Employee .
а справа создаётся новый экземпляр с типом класса FixedPriceEmployee.
Но как это реально ??? присвоить переменной зарезервированной под класс Employee экземпляр FixedPriceEmployee?
Ведь последний является потомком первого, как раз-таки в экземпляре могут содержаться методы о которых не знает переменная e.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339522
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Ведь последний является потомком первого, как раз-таки в экземпляре могут содержаться методы о которых не знает переменная e.
Всё верно. И это не страшно. Мы можем обращаться с FixedPriceEmployee, как с Employee. Просто часть методов нам может быть не видна. Но мы используем переменную типа Employee в том случае когда нам всё равно какой именно там Employee внутри. Это и есть полиморфизм.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339527
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы стало совсем понятно нужно ещё вспомнить про виртуальные методы. Когда мы вызываем Employee.getSalary() в коде, мы не знаем какой именно из двух методов FixedPriceEmployee.getSalary() или PartTimeEmployee.getSalary(). Конкретный метод будет определен в рантайме динамически в зависимости от типа объекта на который ссылается переменная.

Попробуйте понять вот эти утверждения:
1. Переменная это ссылка.
2. Объект имеет конкретный тип.
3. Все методы кроме private, static и final являются виртуальными. Их вызов определяется динамически во время выполнения кода через таблицу виртуальных методов. Вызовы не виртуальных методов "линкуются" во время компиляции на конкретные реализации этих методов.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339550
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81Ведь последний является потомком первого, как раз-таки в экземпляре могут содержаться методы о которых не знает переменная e.
Всё верно. И это не страшно.


ну как это не страшно ?

вам же никто не позволит сделать например вот так :

int i = 5;
i="Hello, world";

BlazkowiczМы можем обращаться с FixedPriceEmployee, как с Employee.


да, можем так как FixedPriceEmployee наследник Employee.
Blazkowicz Просто часть методов нам может быть не видна. Но мы используем переменную типа Employee в том случае когда нам всё равно какой именно там Employee внутри.


где там внутри ??? как может быть внутри Employee быть FixedPriceEmployee ? это в FixedPriceEmployee может быть Employee.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339553
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81где там внутри ??? как может быть внутри Employee быть FixedPriceEmployee ? это в FixedPriceEmployee может быть Employee.
Вы путаете переменную и объект\тип. Я говори про "внутри" переменной. Переменная ссылается на любой тип. В Java строгая типизация, поэтому тип объекта должен совпадать или быть наследником типа переменной. Существуют языки без строгой типизации. Там переменная вообще может ссылаться на объект любого типа.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339569
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz...тип объекта должен быть наследником типа переменной.


вооот !
в этом то и фишка. в моём понимании наоборот )))
у меня именно это в голове и не укладывается
с точки зрения логики переменная e резервируется под предка (набор функций предка)
а объект наряду с функциями предка обладает ещё доп. функциями (набор функций предка + собственные функции)

и как можно первому дать значение в виде второго.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339572
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81вооот !
в этом то и фишка. в моём понимании наоборот )))
у меня именно это в голове и не укладывается
с точки зрения логики переменная e резервируется под предка (набор функций предка)
а объект наряду с функциями предка обладает ещё доп. функциями (набор функций предка + собственные функции)

и как можно первому дать значение в виде второго.
Нет. Ничего никуда не резервируется. Вы понимаете как работает память? Объект это данные, которые лежат по определенному адресу. Переменная, это ссылка. Она может содержать любой адрес. Вообще любой.

И есть такая штука, как компилятор. В нём реализована строгая типизация. Вот он и следит за тем чтобы определенные ссылки могли ссылаться только на определенные объекты. (есть конечно ещё и дополнительный контроль типа в рантайме, но это отдельная история)

Мне кажется, вам стоило бы отложить ООП в сторону и освоить азы С\С++ или другого низкоуровнего языка. Тогда бы было поверх чего строить понимание.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339580
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Мне кажется, вам стоило бы отложить ООП в сторону и освоить азы С\С++ или другого низкоуровнего языка. Тогда бы было поверх чего строить понимание.

ну да. я никогда не задумывался в такой конструкции как :

int i ;
i=10;

всегда расценивал с математической точки зрения. и мне этого хватало
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339583
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
Наследники это матрешка.
Ссылку Обозначить можно на любой элемент матрешки. Но если мы обозначим на базовую, то туда просто больше штук из одной матрёшки влезет.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339662
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

вроде бы стал немного допекать :

Employee e = new FixedPriceEmployee();

мы в e присваиваем ссылку на экземпляр подкласса FixedPriceEmployee. А new FixedPriceEmployee() - это создание экземпляра. таким образом в "e" будут доступны только методы которые есть в "e" .
понятно , что если есть методы с такой же сигнатурой описанные в FixedPriceEmployee то будут они выполняться. но это другая история. Самое важно, что я для себя уяснил выделил выше.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339667
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81понятно , что если есть методы с такой же сигнатурой описанные в FixedPriceEmployee то будут они выполняться. но это другая история. Самое важно, что я для себя уяснил выделил выше.

Смотри.

Код: java
1.
2.
3.
4.
5.
Employee e;  //"Создали" ссылку (на самом деле "объявили")
e = new FixedPriceEmployee(); //создали объект и присвоили ссылке адрес объекта
e.getSalary(); //Вызывали виртуальный метод, реализация будет выбрана в зависимости от типа объекта. Это и есть "полиморфизм"
//А теперь финт ушами
((FixedPriceEmployee) e).runFixedPriceEmployeeSpecificMethod(); //Вызвали метод конкретного типа
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339671
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandron81понятно , что если есть методы с такой же сигнатурой описанные в FixedPriceEmployee то будут они выполняться. но это другая история. Самое важно, что я для себя уяснил выделил выше.

Смотри.

Код: java
1.
2.
3.
4.
5.
Employee e;  //"Создали" ссылку (на самом деле "объявили")
e = new FixedPriceEmployee(); //создали объект и присвоили ссылке адрес объекта
e.getSalary(); //Вызывали виртуальный метод, реализация будет выбрана в зависимости от типа объекта. Это и есть "полиморфизм"
//А теперь финт ушами
((FixedPriceEmployee) e).runFixedPriceEmployeeSpecificMethod(); //Вызвали метод конкретного типа



финт ушами мне пока рано .
спасибо участникам за помощь и терпение
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339677
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81 таким образом в "e" будут доступны только методы которые есть в "e" .
без указания компилятору что преобразуем тип (по простому) - все какие есть в e, но вызван будет из старшей матрёшки.
(Blazkowicz написал).
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339691
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81финт ушами мне пока рано .
спасибо участникам за помощь и терпение
Ну, по-моему это важно для понимания.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339692
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123без указания компилятору что преобразуем тип (по простому)


то есть ? поясните
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339693
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
Код: java
1.
((FixedPriceEmployee) e).runFixedPriceEmployeeSpecificMethod(); //Вызвали метод конкретного типа


А разве не метод описанный в конкретном типе?
(Если конечно приведение типов состоится)
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339697
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевА разве не метод описанный в конкретном типе?

Ну, я пытаюсь объяснить по простому, а не быть академически точным.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339705
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81финт ушами мне пока рано .
На самом деле с него и надо начинать.
Виртуальные методы это способ позднего связывания.
Рассматривай класс, как табличку ссылок, слева как называется (и общее описание, вроде того, что передать методу и какого типа результат), справа, что подразумевается.
При наследовании можно (не всегда правда) менять содержимое правого столбца и добавлять строки.
Приведение типа к предку выглядит, как шаблон с вырезанными дырками в местах, где были описания у предка. При наложении шаблона, мы видим только то, где дырки. Но правый столбец тот, что создан у потомка.

Если привести назад к типу потомка (заменить шаблон), то увидим то, что есть у потомка.

При этом предка привести к потомку не получится - у него на против добавленных строк ничего нет.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339719
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Petro123без указания компилятору что преобразуем тип (по простому)

то есть ? поясните
Blazkowicz же последней строкой написал пример.
- компилятор (IDE) тупой, и без указания автоматом подбирает самый старший наследник. Логично?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339724
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
да . только непонятно зачем это надо.
Если я верно понимаю в этом случае мы отказываемся от полиморфизма ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339727
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Petro123,
да . только непонятно зачем это надо.
Если я верно понимаю в этом случае мы отказываемся от полиморфизма ?
Да.
И на твоём этапе это не надо. Иди по цели топика . Иначе никогда не дойдёшь до версии 1.0.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339735
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

может быть это понадобится, когда у нас такое построение классов : предок - > наследник1 -> наследник2 ?
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39339746
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81Petro123,
может быть это понадобится, когда у нас такое построение классов : предок - > наследник1 -> наследник2 ?
откроешь другой топик. Там море ньюансов. И задачу реальную надо придумать).
Удачи!
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340141
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё же странно себя ведёт массив из классов )))

Код: java
1.
2.
3.
4.
5.
6.
		employee[] employees = new employee[10];
		
		employees[0] = new FixedPriceEmployee(1, "Маша", 25000);
		employees[1] = new Timed(2, "Коля", 14);
		employees[2] = new Timed(2, "Петя", 14);
		System.out.println(employees[1].getName()  );



здесь хотелось бы видеть "Коля" , а выводит "Петя".


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
package persony;

import java.util.ArrayList;

public class main  {
	public static void main(String args[]) {

		
		
		employee[] employees = new employee[10];
		
		employees[0] = new FixedPriceEmployee(1, "Маша", 25000);
		employees[1] = new Timed(2, "Коля", 14);
		employees[2] = new Timed(2, "Петя", 14);
		System.out.println(employees[1].getName()  );
		
			}

}


package persony;



abstract class employee {
	
	 
	
	abstract  double Get_Salary(float s) ;

	abstract  String getName() ;

	
	
}


package persony;

public class Timed extends employee {
	
	 private static String name ;
	 private static int id ;
	 private static int time ;
	 private double salary ;
	 

	 public Timed(int i, String name, int time) {
		
			this.setName(name);
			this.time = time;
			
	}




	public  String getName() {
		return name;
	}

	public static void setName(String name) {
		Timed.name = name;
	}




	@Override
	double Get_Salary(float s) {
		// TODO Auto-generated method stub
		return 0;
	}



	
	 

	
}

package persony;

public class FixedPriceEmployee extends employee {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public FixedPriceEmployee(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name=name;
	}



/*
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}
*/

	public String getName() {
		return name;
	}



	public static void setName(String name) {
		FixedPriceEmployee.name = name;
	}



	@Override
	double Get_Salary(float s) {
		// TODO Auto-generated method stub
		return 0;
	}


	 
}
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340146
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,
не делай больше одной пустой строки.
Самое время пройтись пошаговой отладкой самому и выяснить вопрос.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340161
Фотография fixxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заодно выясните отличие static поля от не static.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340162
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81всё же странно себя ведёт массив из классов )))
Осталось понять кто и зачем в этом коде написал ключевое слово static.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340174
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

ок. все советы учту
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340373
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

понятно. исходя из подсказок вывод: сделал жесткое поле Name значение которого таскается постоянно, все экземпляры ссылаются на то что было присвоено. короче для каждого экземпляра не создаётся Name. а надо бы динамическим это поле.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340376
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81,

короче static для полиморфизма зло судя по всему
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39340379
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron81короче static для полиморфизма зло судя по всему
Существует статический полиморфизм. И вообще разные его проявления.
http://stackoverflow.com/questions/20783266/what-is-the-difference-between-dynamic-and-static-polymorphism-in-java
http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
Хотя в большинстве случаев под полиморфизмом понимают именно виртуальные методы.
...
Рейтинг: 0 / 0
задача о персонале с фикс и повременной з.п.
    #39341036
andron81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно попинать, с точки зрения ООП и не только.
:)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package pers;

abstract class Employee{
	abstract  String getName();
	abstract void setName(String name); 
	abstract void setSalary(double salary) ;
	abstract double getSalary();
	abstract String getType();
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
package pers;


public class Timed extends Employee {
	
	private String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/
	 public int jjjj; 
	


	 public Timed(int i, String name, double salary )  {
		 //System.out.println(name);
		 	this.salary = salary;
			this.name=name;
	
	}



	@Override
	double getSalary() {

		 return 20.8 * 8 * salary;
	}
	@Override
	String getType() {
		return "Timed";
	}

	@Override
	String getName() {

		return this.name;
	}



	@Override
	void setName(String name) {
		this.name = name;
	}

	@Override
	void setSalary(double salary) {
		// TODO Auto-generated method stub
		
	}

}




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
package pers;

public class FixedPriceEmployee  extends Employee {
	 private String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/
	 public int jjjj; 	
	 public FixedPriceEmployee(int i, String name, double salary )  {	
		 //System.out.println(name);
		 	this.setSalary(salary);
		 	this.name=name;
	}
	@Override
	double getSalary() {
	
		 return salary;
	}
	@Override
	String getName() {
		//JOptionPane.showMessageDialog(null,  this.name);
		return this.name;
	}
	@Override
	void setName(String name) {
		this.name = name;
	}

	@Override
	void setSalary(double salary) {
		this.salary = salary;
	}
	@Override
	 String getType() {
		return "FixedPriceEmployee";
	}
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
package pers;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Operations_employee {
	private Employee[] e1;
	private int len;
	private Scanner scn;
	private String filename;
	 
	 public String getName( int i) {
		 return e1[i].getName();
		 }
	 
	 public double getSalary( int i) {
		 return e1[i].getSalary();
		 }
	 public String getType( int i) {
		 return e1[i].getType();
		 }
	 
	 public Operations_employee (String fn) {
		 this.filename=fn;
		 this.len = GetRowQtyInFile();		
		e1 = new Employee[len] ;				
		openfile();
		readfile();				
	 }	 
	 public int GetRowQtyInFile() {
		 /*считает кол-во строк в файле(проще способа я не нашёл по средствам сканера тоже не пойму как сделать )*/
		 int lineNumber = 0;
	 try{
		 File myFile =new File(filename); 
		FileReader fileReader = new FileReader(myFile);
		 LineNumberReader lineNumberReader = new LineNumberReader(fileReader);		  		  
		 while (lineNumberReader.readLine() != null){
		 lineNumber++;
		 }		  		  
		 lineNumberReader.close();		
		 }catch(IOException e){
		 e.printStackTrace();
		 }
	 return lineNumber;
	 }	 	 
	 public void openfile() {
		 /*открывает файл*/
		 try {
			 scn = new Scanner (new File(filename));	 
		 } catch(Exception e) {JOptionPane.showMessageDialog(null, "Файл не найден");}
		}	 
	 public void readfile() {
		 /*читает файл*/
		 String n; /*тут будет прочитано ниже ID - служащего*/
		 String type; /*тут будет прочитано тип зар. платы - служащего (на окладе/повременщик)*/
		 String s; /*имя служащего*/
		 String sal; /*тут будет зар. плата в случае служащего с окладом или время в случае повременщика */ 				 		
		    for (int row=0;row<len-1;row++ ) {		    	  
		    	n=scn.next();
		    	type=scn.next();
		    	s=scn.next();		    	
		    	sal=scn.next();
	if (type.equals("t")) {e1[row] = new Timed(  Integer.parseInt(n) , s,  Float.parseFloat(sal));}
	if (type.equals("f")) { e1[row] = new FixedPriceEmployee(  Integer.parseInt(n) , s,  Float.parseFloat(sal));}		    	
		 }
	 }
	 public void change_elements(int i, int j) {
		 /*меняет элементы массива местами*/
		 Employee e10;
		 
		 	e10=e1[i];
		 	e1[i]=e1[j];
		 	e1[j]=e10;
	 }
	 public void view_all_elements() {
		 /*вывод элементов массива */
		 for (int i = 0; i <= len-1; i++) {
			 if (i<=len-2) {System.out.print(i) ;System.out.print(e1[i].getName()+" "+e1[i].getType()+" "+e1[i].getSalary());}
			  System.out.println();
			} 
	 }
	 public void sort_elements() {
		 /*сортировка пузырьком*/
		int k=len-2;
		for (int j = 0; j <= len-2; j++) {
					 for (int i = 0; i <= k; i++) {
			 if (i+1<=len-2) { 
			 if (e1[i].getSalary()<e1[i+1].getSalary()) {change_elements(i, i+1);}
			 }
			} k--;
		}
		/*сортировка по именам в алфавитном порядке в элементах с одинаковой зар. платой */
		k=len-2;
		for (int j = 0; j <= len-2; j++) {
			for ( int i = 0; i <= k; i++) {
			 if (i+1<=len-2) { 
			 if ((e1[i].getSalary()==e1[i+1].getSalary()) && e1[i].getName().compareTo(e1[i+1].getName())   >0 ) {change_elements(i, i+1);}
			 }
			} k--;
		}
	 }
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
package pers;
import javax.swing.JOptionPane;
public class Main  {
	public static void main(String args[]) {
		Operations_employee o = new Operations_employee("res//test.txt");		
		o.view_all_elements();
		 System.out.println();
		o.sort_elements();
		o.view_all_elements();              
			}
}
...
Рейтинг: 0 / 0
70 сообщений из 70, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / задача о персонале с фикс и повременной з.п.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]