Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
2
20231104-KursPodstawowyALX
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
20231104-KursPodstawowyALX
Commits
38219ed7
Commit
38219ed7
authored
Jan 07, 2024
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dodatkowe wersje grupowania
parent
0829b6b4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
181 additions
and
0 deletions
+181
-0
Grupowanie_Switch.java
src/main/java/emps/v2_obiektowo/Grupowanie_Switch.java
+40
-0
Grupowanie_v6.java
src/main/java/emps/v2_obiektowo/Grupowanie_v6.java
+36
-0
Grupowanie_v7.java
src/main/java/emps/v2_obiektowo/Grupowanie_v7.java
+67
-0
Porownywanie.java
src/main/java/emps/v2_obiektowo/Porownywanie.java
+38
-0
No files found.
src/main/java/emps/v2_obiektowo/Grupowanie_Switch.java
0 → 100644
View file @
38219ed7
package
emps
.
v2_obiektowo
;
import
java.util.List
;
public
class
Grupowanie_Switch
{
// Ta wersja tylko jako wprowadzenie do wersji ze słownikami.
// Gdybyśmy dla każdego joba mieli oddzielną zmienną do liczenia sumy,
// moglibyśmy wszystko policzyć w jednej pętli.
// Problem:
// 1) program powinien czytać dowolne dane; nie powinien z góry zakładać, jakie są joby
// 2) każdy nowy job zwiększa ilość kodu.
// → jesli zamiast oddzielnych zmiennych użyjemy jednego słownika, to zrobimy to samo, ale zwięźlej
// słownik (Map) z kluczami typu String może być traktowany jako namiasta zestawu zmiennych,
// który możemy łatwo rozszerzać gdy pojawiają się nowe wartości
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
double
sumaProgrammer
=
0
;
double
sumaAccountant
=
0
;
double
sumaPresident
=
0
;
// itd....
for
(
Employee
emp
:
emps
)
{
switch
(
emp
.
getJobTitle
())
{
case
"Programmer"
->
sumaProgrammer
+=
emp
.
getSalary
();
case
"Accountant"
->
sumaAccountant
+=
emp
.
getSalary
();
case
"President"
->
sumaPresident
+=
emp
.
getSalary
();
}
}
System
.
out
.
println
(
sumaProgrammer
);
System
.
out
.
println
(
sumaAccountant
);
System
.
out
.
println
(
sumaPresident
);
}
}
src/main/java/emps/v2_obiektowo/Grupowanie_v6.java
0 → 100644
View file @
38219ed7
package
emps
.
v2_obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
public
class
Grupowanie_v6
{
public
static
void
main
(
String
[]
args
)
{
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
Map
<
String
,
int
[]>
slownik
=
new
TreeMap
<>();
for
(
Employee
emp
:
emps
)
{
if
(
slownik
.
containsKey
(
emp
.
getJobTitle
()))
{
// to jest kolejny pracownik z tego stanowiska → zwiększamy wartość w słowniku
int
[]
t
=
slownik
.
get
(
emp
.
getJobTitle
());
t
[
0
]++;
t
[
1
]
+=
emp
.
getSalary
();
// dostaliśmy referencję do tablicy i gdy ją modyfikujemy, to słownik też to "widzi"
}
else
{
// to jest pierwszy pracownik z tego stanowiska → wpisujemy jego pensję jako wartość początkową
slownik
.
put
(
emp
.
getJobTitle
(),
new
int
[]
{
1
,
emp
.
getSalary
()});
}
}
// przeglądamy "wpisy" w słowniku, czyli klucze wraz z wartościami
for
(
Map
.
Entry
<
String
,
int
[]>
entry
:
slownik
.
entrySet
())
{
String
job
=
entry
.
getKey
();
int
[]
t
=
entry
.
getValue
();
double
srednia
=
(
double
)
t
[
1
]
/
t
[
0
];
System
.
out
.
printf
(
"%-32s | %2d | %8.2f\n"
,
job
,
t
[
0
],
srednia
);
}
}
}
src/main/java/emps/v2_obiektowo/Grupowanie_v7.java
0 → 100644
View file @
38219ed7
package
emps
.
v2_obiektowo
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.TreeMap
;
// Podejście obiektowe do grupowania.
public
class
Grupowanie_v7
{
public
static
void
main
(
String
[]
args
)
{
final
List
<
Employee
>
emps
=
ObslugaCSV
.
wczytajDane
();
final
Map
<
String
,
JobInfo
>
mapa
=
new
TreeMap
<>();
for
(
Employee
emp
:
emps
)
{
final
String
jobTitle
=
emp
.
getJobTitle
();
JobInfo
jobInfo
=
mapa
.
get
(
jobTitle
);
if
(
jobInfo
==
null
)
{
jobInfo
=
new
JobInfo
(
jobTitle
);
mapa
.
put
(
jobTitle
,
jobInfo
);
}
jobInfo
.
update
(
emp
);
}
for
(
JobInfo
jobInfo
:
mapa
.
values
())
{
System
.
out
.
println
(
jobInfo
);
}
}
// Klasa zgnieżdżona - tylko dla przykładu.
// Równie dobrze mógłbym tę klase zdefiniować w osobnym pliku.
// Obiekt tej klasy przechowuje statystyki job
private
static
class
JobInfo
{
final
String
jobTitle
;
int
count
=
0
;
int
sum
=
0
;
int
min
=
Integer
.
MAX_VALUE
;
int
max
=
Integer
.
MIN_VALUE
;
JobInfo
(
String
jobTitle
)
{
this
.
jobTitle
=
jobTitle
;
}
void
update
(
Employee
emp
)
{
int
salary
=
emp
.
getSalary
();
count
++;
sum
+=
salary
;
if
(
salary
<
min
)
{
min
=
salary
;
}
if
(
salary
>
max
)
{
max
=
salary
;
}
}
double
avg
()
{
return
(
double
)
sum
/
count
;
}
@Override
public
String
toString
()
{
return
"jobTitle="
+
jobTitle
+
", count="
+
count
+
", sum="
+
sum
+
", min="
+
min
+
", max="
+
max
+
", avg="
+
avg
();
}
}
}
src/main/java/emps/v2_obiektowo/Porownywanie.java
0 → 100644
View file @
38219ed7
package
emps
.
v2_obiektowo
;
import
java.time.LocalDate
;
public
class
Porownywanie
{
public
static
void
main
(
String
[]
args
)
{
Employee
emp1
=
new
Employee
(
1
,
"Jan"
,
"Kowalski"
,
"kierowca"
,
4400
,
LocalDate
.
of
(
1990
,
4
,
5
),
"transport"
,
"Jasna 14"
,
"01-234"
,
"Warszawa"
,
"Polska"
);
Employee
emp2
=
new
Employee
(
1
,
"Jan"
,
"Kowalski"
,
"kierowca"
,
4400
,
LocalDate
.
of
(
1990
,
4
,
5
),
"transport"
,
"Jasna 14"
,
"01-234"
,
"Warszawa"
,
"Polska"
);
Employee
emp3
=
new
Employee
(
3
,
"Janina"
,
"Kowalska"
,
"kierowca"
,
4400
,
LocalDate
.
of
(
1990
,
4
,
5
),
"transport"
,
"Jasna 14"
,
"01-234"
,
"Warszawa"
,
"Polska"
);
Employee
emp4
=
emp1
;
System
.
out
.
println
(
emp1
);
System
.
out
.
println
(
emp2
);
System
.
out
.
println
(
emp3
);
System
.
out
.
println
();
System
.
out
.
println
(
"=="
);
System
.
out
.
println
(
emp1
==
emp1
);
System
.
out
.
println
(
emp1
==
emp2
);
System
.
out
.
println
(
emp1
==
emp3
);
System
.
out
.
println
(
emp1
==
emp4
);
System
.
out
.
println
();
System
.
out
.
println
(
"eq"
);
System
.
out
.
println
(
emp1
.
equals
(
emp1
));
System
.
out
.
println
(
emp1
.
equals
(
emp2
));
System
.
out
.
println
(
emp1
.
equals
(
emp3
));
System
.
out
.
println
(
emp1
.
equals
(
emp4
));
// Domyślna implementacja equals, tak samo jak operacja ==, porównuje adresy obiektów.
// Sprawdza, czy to jest TEN SAM obiekt (a nie TAKI SAM).
// Aby equals sprawdzało czy obiekty zawierają te same dane, powinniśmy przedefiniować (Override)metodę equals w definicji klasy.
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment