Necesito una pequeña ayuda... No pido mucho... [ Juego de Colas ]
Publicado por Ismael (14 intervenciones) el 24/02/2016 12:13:00
Hola muy buenas, estoy haciendo un pequeño "juego" en java que es de una simulación de 5 colas y llevo ya unos dias atascado en lo mismo y no consigo salir de aqui, haber si ustedes como buenos programadores que sois me podríais ayudar, tiene que ser hecho con cosas sencillas que hemos ido dando este curso,
Haber el problema que tengo es que con el codigo que yo les dejo ahora, estan bien los metodos Extraer_Tarea y Servir_Tarea, esos creo que no hay que tocarlos, si lo pruebas con la cola1 veréis que si que va asignando tareas en un periodo de tiempo cada vez que pulsamos enter tiene que asignar tareas al final de la cola DE LA COLA QUE TENGA MENOS LONGITUD EN ESE MOMENTO, ES DECIR PRIMERO ASIGNARÁ A LA PRIMERA, LUEGO A LA SEGUNDA.... Y A MEDIDA QUE VAYAN SALIENDO TAREAS LA ASIGNARÁ A LA QUE MENOS LONGITUD TENGA EN ESE MOMENTO Y AHÍ ES DONDE ESTOY ATASCADO, SOLAMENTE ME PODRIAIS ORIENTAR O DECIR MAS O MENOS POR DONDE TENGO QUE TIRAR PARA QUE ME LO AGREGUE A LA COLA CON MENOS LONGITUD, EL PROBLEMA DICE QUE HAY QUE HACER APARTE DE LOS METODOS QUE YA HE HECHO HAY QUE HACER UNO LLAMADO MedirCola --> devuelve numero de tareas en una cola en un momento dado
AsignarCola-->indica donde debe insertarse la tarea que se genera cada frec minutos
Los intenté hacer pero ha sido un desastre y quedaba peor de como estaba y ya no sabia que hacer...
A partir de este codigo
CLASE COLA.JAVA
MAIN:
Haber el problema que tengo es que con el codigo que yo les dejo ahora, estan bien los metodos Extraer_Tarea y Servir_Tarea, esos creo que no hay que tocarlos, si lo pruebas con la cola1 veréis que si que va asignando tareas en un periodo de tiempo cada vez que pulsamos enter tiene que asignar tareas al final de la cola DE LA COLA QUE TENGA MENOS LONGITUD EN ESE MOMENTO, ES DECIR PRIMERO ASIGNARÁ A LA PRIMERA, LUEGO A LA SEGUNDA.... Y A MEDIDA QUE VAYAN SALIENDO TAREAS LA ASIGNARÁ A LA QUE MENOS LONGITUD TENGA EN ESE MOMENTO Y AHÍ ES DONDE ESTOY ATASCADO, SOLAMENTE ME PODRIAIS ORIENTAR O DECIR MAS O MENOS POR DONDE TENGO QUE TIRAR PARA QUE ME LO AGREGUE A LA COLA CON MENOS LONGITUD, EL PROBLEMA DICE QUE HAY QUE HACER APARTE DE LOS METODOS QUE YA HE HECHO HAY QUE HACER UNO LLAMADO MedirCola --> devuelve numero de tareas en una cola en un momento dado
AsignarCola-->indica donde debe insertarse la tarea que se genera cada frec minutos
Los intenté hacer pero ha sido un desastre y quedaba peor de como estaba y ya no sabia que hacer...
A partir de este codigo
CLASE COLA.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
package ejer_4;
public class Cola {
private int longitud;
private int listapersonas[] = new int[100];
public Cola(){
longitud=0;
}
public void Servir_Cola(){
for(int i=0;i<longitud;i++){
if(listapersonas[i]>0){ //si es mayor que 0, restale 1 minuto
listapersonas[i]=listapersonas[i]-1;
}
if(listapersonas[i]<1){ //si es menor de 1, la suprimirá
Extraer_Tarea(i);
}
}
}
public void Medir_Cola(int valor,Cola c1, Cola c2, Cola c3, Cola c4, Cola c5){
//Devuelve el indice de la mas corta
/*
int menor=0;
if(c1.longitud<c2.longitud && c1.longitud<c3.longitud && c1.longitud<c4.longitud && c1.longitud<c5.longitud) menor=c1.longitud;
else if(c2.longitud<c1.longitud && c2.longitud<c3.longitud && c2.longitud<c4.longitud && c2.longitud<c5.longitud) menor=c2.longitud;
else if(c3.longitud<c2.longitud && c3.longitud<c1.longitud && c3.longitud<c4.longitud && c3.longitud<c5.longitud) menor=c3.longitud;
else if(c4.longitud<c1.longitud && c4.longitud<c2.longitud && c4.longitud<c3.longitud && c4.longitud<c5.longitud) menor=c4.longitud;
else if(c5.longitud<c1.longitud && c5.longitud<c2.longitud && c5.longitud<c3.longitud && c5.longitud<c4.longitud) menor=c5.longitud;
if(menor==c1.longitud){
x=1;
}
if(menor==c2.longitud){
x=2;
}
if(menor==c3.longitud){
x=3;
}
if(menor==c4.longitud){
x=4;
}
if(menor==c5.longitud){
x=5;
ÉSTO LO HE PROBADO Y NO FUNCIONA ^^ ES QUE ESO NO SERÍA ASI ME HAN DICHO
}*/
}
public void Asignar_Cola(){
//La tarea debe insertarse en la cola numero x
}
public void Insertar_Tarea(int x){ //LE PASO X SERÁN LOS MINUTOS AL AZAR DADOS POR EL MAIN, PARA ASIGNARLOS Y MINUTO SERA POR EL MINUTO QUE VA
longitud++;
listapersonas[longitud]=x;
}
public void Extraer_Tarea(int posicion){
int cambio;
for(int p=0;p<longitud;p++){
if(listapersonas[p]==listapersonas[posicion]){ //SI COINCIDE CON LA POSICION PASADA POR EL PARAMETRO
longitud++; //COMO SI AGREGASEMOS UN 0 AL FINAL
listapersonas[longitud]=listapersonas[p]; //PONLE AL 0 DEL FINAL LA POSICION A ELIMINAR
listapersonas[p]=0;//LE PONE UN 0 YA QUE ESTÁ AL FINAL
longitud--;//Y SUPRIME LA ÚLTIMA POSICION
}
}//CON EL FIN DE ÉTE BUCLE TENEMOS LA VARIABLE EN CUESTION ELIMINADA PERO QUEDA UN 0
listapersonas[posicion+1]=listapersonas[posicion+1]-1; //PARA QUE ÉSA POSICION LE RESTE UNO, SINO SALE SIN DESCONTAR EL MINUTO QUE LE CORRESPONDE
for(int p=0;p<longitud;p++){ // PARA ELLO HACEMOS UN BUCLE QUE NOS DEJE EL 0 AL FINAL INTERCAMBIANDO POR LA POSICION SIGUIENTE Y ASI HASTA QUE EL 0 QUEDE AL FINAL
if(listapersonas[p]==0){
cambio=listapersonas[p];
listapersonas[p]=listapersonas[p+1];
listapersonas[p+1]=cambio;
}
}
longitud--; //CON EL 0 YA EN EL FINAL HACIENDO UN LONGITUD-- ELIMINAMOS ESA ULTIMA POSICION, POR LO QUE YA HABRA ELIMINADO EL ELEMENTO EN CUESTIÓN
}
public void VisualizarCola(){
for(int k=0;k<longitud;k++){ //mostrará *-20 *-30 *-12 por ejemplo
System.out.print(" *" + -listapersonas[k]);
}
}
}
MAIN:
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
package ejer_4;
import java.util.*;
public class Uso_Cola {
public static void main(String[] args) {
Random rnd = new Random();
Scanner teclado = new Scanner(System.in);
int valor,x=5,y=10,z=15,frec=1;
//CREAMOS NUESTROS 5 OBJETOS COLA, PARA TRABAJAR CON ELLOS
Cola cola1 = new Cola();
Cola cola2 = new Cola();
Cola cola3 = new Cola();
Cola cola4 = new Cola();
Cola cola5 = new Cola();
for(int i=1; i <= 300; i++){ //BUCLE QUE REPITE 300 VECES EL PROCESO
valor=rnd.nextInt(100)+1; //GENERA NUMERO AL AZAR
if(valor>=1 && valor<=60){ //SI ESTÁ ENTRE ESTE INTERVALO SERÁ DE DURACION X
valor=x;
}
if(valor>=61 && valor<=85){//SI ESTÁ ENTRE ESTE INTERVALO SERÁ DE DURACION Y
valor=y;
}
if(valor>=86 && valor<=100){//SI ESTÁ ENTRE ESTE INTERVALO SERÁ DE DURACION Z
valor=z;
}
cola1.Insertar_Tarea(valor); //HE PUESTO PARA QUE FUNCIONE SOLO CON 1 COLA PARA QUE LO PROBEIS
cola1.Servir_Cola(); //CADA MINUTO QUE PASA AY QUE DESCONTARLO DE LA TAREA
cola2.Servir_Cola();
cola3.Servir_Cola();
cola4.Servir_Cola();
cola5.Servir_Cola();
System.out.println("COLA1:");
cola1.VisualizarCola();
System.out.println();
System.out.println("COLA2:");
cola2.VisualizarCola();
System.out.println();
System.out.println("COLA3:");
cola3.VisualizarCola();
System.out.println();
System.out.println("COLA4:");
cola4.VisualizarCola();
System.out.println();
System.out.println("COLA5:");
cola5.VisualizarCola();
teclado.nextLine();//cada vez que pulsemos enter se verá el estado de las colas, llamando a sus respectivos metodos
}
}
}
Valora esta pregunta
0