Repository navigation
Expand file tree
/
Copy pathEquipo.java
More file actions
318 lines (285 loc) · 9.86 KB
/
Copy pathEquipo.java
File metadata and controls
318 lines (285 loc) · 9.86 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
/**
* Clase que representa a los Equipos que competirán
*
* @author Alexeido, Thander y Natera
* @version 1.0
*/
import java.util.*;
import java.lang.*;
import java.io.*;
import java.io.IOException;
import java.nio.*;
public class Equipo {
private String nombre;
private ArrayList<Ciclista> ciclistas;
private ArrayList<Ciclista> ciclistasAbandonados;
private ArrayList<Bicicleta> bicis;
private double tiempoMedio;
private Comparator<Bicicleta> ordenBicicleta;
private Comparator<Ciclista> ordenCiclista;
/**
* Constructor de objetos para la clase Equipo
*/
public Equipo() {
nombre = "";
ciclistas = new ArrayList<Ciclista>();
ciclistasAbandonados = new ArrayList<Ciclista>();
bicis = new ArrayList<Bicicleta>();
tiempoMedio = 0;
this.ordenBicicleta = new PesoComparatorAsc();
this.ordenCiclista = new NombreCComparator();
}
/**
* Constructor parametrizado de objetos para la clase Equipo
*
* @param nombre Nombre del equipo
* @param ciclistas Ciclistas del equipo
* @param ciclistasAbandonados Ciclistas abandonados del equipo
* @param bicis Bicicletas del equipo
* @param tiempoMedio Tiempo medio del equipo
* @param ordenCiclista indica el orden de los ciclistas
* @param ordenBicicleta indica el orden de las bicicletas
*/
public Equipo(String nombre, ArrayList<Ciclista> ciclistas, ArrayList<Ciclista> ciclistasAbandonados,
ArrayList<Bicicleta> bicis, double tiempoMedio, Comparator<Ciclista> ordenCiclista,
Comparator<Bicicleta> ordenBicicleta) {
this.nombre = nombre;
this.ciclistas = ciclistas;
this.ciclistasAbandonados = ciclistasAbandonados;
this.bicis = bicis;
this.tiempoMedio = tiempoMedio;
this.ordenBicicleta = ordenBicicleta;
this.ordenCiclista = ordenCiclista;
}
/**
* Constructor parametrizado de objetos para la clase Equipo
*
* @param nombre Nombre del equipo
* @param ordenCiclista indica el orden de los ciclistas
* @param ordenBicicleta indica el orden de las bicicletas
*/
public Equipo(String nombre, Comparator<Ciclista> ordenCiclista, Comparator<Bicicleta> ordenBicicleta) {
this.nombre = nombre;
this.ordenBicicleta = ordenBicicleta;
this.ordenCiclista = ordenCiclista;
ciclistas = new ArrayList<Ciclista>();
ciclistasAbandonados = new ArrayList<Ciclista>();
bicis = new ArrayList<Bicicleta>();
}
/**
* @return Nombre del equipo
*/
public String getNombre() {
return this.nombre;
}
/**
* @param nombre Nombre del equipo
*/
public void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* @return ArrayList de ciclistas
*/
public ArrayList<Ciclista> getCiclistas() {
return this.ciclistas;
}
/**
* @param ciclistas ArrayList de ciclistas
*/
public void setCiclistas(ArrayList<Ciclista> ciclistas) {
this.ciclistas = ciclistas;
}
/**
* @return ArrayList de ciclistas abandonados
*/
public ArrayList<Ciclista> getCiclistasAbandonados() {
return this.ciclistasAbandonados;
}
/**
* @return ArrayLiist de Bicicletas
*/
public ArrayList<Bicicleta> getBicis() {
return this.bicis;
}
/*
* Calcula y establece el tiempo medio del equipo
*/
public void setTiempoMedio() {
this.tiempoMedio = getTiempototal() / ciclistas.size();
}
/**
* @return Tiempo medio del equipo
*/
public double getTiempoMedio() {
return this.tiempoMedio;
}
/**
* @return Orden de las Bicicletas
*/
public Comparator<Bicicleta> getOrdenBicicleta() {
return this.ordenBicicleta;
}
/**
* @param ordenBicicleta Comparator según el que se va a ordenar
*/
public void setOrdenBicicleta(Comparator<Bicicleta> ordenBicicleta) {
this.ordenBicicleta = ordenBicicleta;
}
/**
* @return Comparator de los ciclistas
*/
public Comparator<Ciclista> getOrdenCiclista() {
return this.ordenCiclista;
}
/**
* @param ordenCiclista Comparator según el que se va a ordenar
*/
public void setOrdenCiclista(Comparator<Ciclista> ordenCiclista) {
this.ordenCiclista = ordenCiclista;
}
/*
* Asigna una Bicicleta a cada ciclista
*/
public void asignarbici() {
reOrdenCiclista(ordenCiclista);
for (int i = 0; i < ciclistas.size(); i++) {
ciclistas.get(i).setBicicleta(bicis.get(i));
}
}
/*
* Muestra la informacion del equipo y sus ciclistas
*/
public void mostrarTodo(BufferedWriter ficheroOut) {
try {
System.out.println("%%% " + nombre.toUpperCase() + " %%% Media Minutos de Ciclistas sin abandonar: "
+ String.format("%.2f", tiempoMedio) + " %%%" + '\n');
ficheroOut.write("%%% " + nombre.toUpperCase() + " %%% Media Minutos de Ciclistas sin abandonar: "
+ String.format("%.2f", tiempoMedio) + " %%%" + '\n');
for (int i = 0; i < ciclistas.size(); i++) {
ciclistas.get(i).mostrarSinBici(ficheroOut);// <ciclista:VAN VLEUTEN> <energía: 50.92> <habilidad: 4.96>
// <tiempo
// acumulado sin abandonar: 1149.08> <abandonado:false>
}
for (int i = 0; i < ciclistasAbandonados.size(); i++) {
ciclistasAbandonados.get(i).mostrarSinBici(ficheroOut);
}
System.out.println(
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
+ '\n' +
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
ficheroOut.write(
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
+ '\n' +
"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
} catch (IOException e) {
System.err.println("There was a problem writing to ");
}
}
/*
* Muestra los ciclistas que han abandonado
*/
public void mostrarAbandonos(BufferedWriter ficheroOut) {
try {
for (Ciclista ciclista : ciclistasAbandonados) {
System.out.println(ciclista);
ficheroOut.write("" + ciclista);
}
} catch (IOException e) {
System.err.println("There was a problem writing to ");
}
}
/**
* Añade una bicilceta al vector de Bicicletas y ordena el vector
*
* @param b Bicicleta a añadir
*/
public void addBicicleta(Bicicleta b) {
bicis.add(b);
this.reOrdenBicicleta(this.ordenBicicleta);
}
/**
* Añade un ciclista al vector de ciclistas y ordena el vector
*
* @param c Ciclista a añadir
*/
public void addCiclista(Ciclista c) {
ciclistas.add(c);
this.reOrdenCiclista(this.ordenCiclista);
}
/**
* Reordena el vector de ciclistas
*
* @param ordenCiclista char que indica según que se va a ordenar
*/
public void reOrdenCiclista(Comparator<Ciclista> ordenCiclista) {
Collections.sort(ciclistas, ordenCiclista);
}
/**
* Reordena el vector de Bicicletas
*
* @param ordenBicicleta char que indica según que se va a ordenar
*/
public void reOrdenBicicleta(Comparator<Bicicleta> ordenBicicleta) {
Collections.sort(bicis, ordenBicicleta);
}
/**
* Quita un ciclista del vector de ciclistas y lo añade al de abandonados
*
* @param c Ciclista que abandona
*/
public void addCiclistaAbandonado(Ciclista c) {
ciclistas.remove(c);
ciclistasAbandonados.add(c);
}
/**
* @return Suma de los tiempo totales acumulados en toda la carrera por todos
* los ciclistas del equipo
*/
public double getTiempototal() {
double result = 0;
Ciclista aux;
for (int i = 0; i < ciclistas.size(); i++) {
aux = ciclistas.get(i);
result = result + aux.getTotalTime();
}
return result;
}
/**
* Envia a todos los ciclistas a correr una etapa
*
* @param e Etapa a correr
*/
public void enviarEtapa(Etapa e) {
Ciclista aux;
for (int i = 0; i <= ciclistas.size(); i++) {
aux = ciclistas.get(i);
aux.correrEtapa(e);
}
}
// toString de la clase Equipo
@Override
public String toString() {
return "<Nombre: " + getNombre() + " tiempo medio: " + getTiempoMedio();
}
// equals de la clase Equipo
@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Equipo)) {
return false;
}
Equipo equipo = (Equipo) o;
return Objects.equals(nombre, equipo.nombre) && Objects.equals(ciclistas, equipo.ciclistas)
&& Objects.equals(ciclistasAbandonados, equipo.ciclistasAbandonados)
&& Objects.equals(bicis, equipo.bicis) && tiempoMedio == equipo.tiempoMedio
&& Objects.equals(ordenBicicleta, equipo.ordenBicicleta)
&& Objects.equals(ordenCiclista, equipo.ordenCiclista);
}
// hasCode de la clase Equipo
@Override
public int hashCode() {
return Objects.hash(nombre, ciclistas, ciclistasAbandonados, bicis, tiempoMedio, ordenBicicleta, ordenCiclista);
}
}