Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - raleva

#1
Java / Ayuda con problemas de array y vectores
4 Febrero 2016, 16:13 PM
Pues veréis en este codigo que os paso ahora me da el problema que no suma bien las puntuaciones ya que no vacia el vector cada vez que empieza de nuevo.

En cada jornada, el golfista con menor número de golpes obtiene 3 puntos, el segundo con menor
número de golpes obtiene 2 puntos y el tercero con menor número de golpes obtiene 1 punto
(pueden existir varios golfistas con el mismo número de golpes, por lo que hay varios que pueden
obtener 3 puntos, varios que pueden obtener 2 puntos y varios que pueden obtener 1 punto).
Para calcular el número de puntos se usa la función calculaPuntosDeJornada(int [] punt_golf),
que guarda en el vector los puntos que obtiene cada golfista.

public class golfistas {

final static int N = 5;// golfistas
final static int M = 4;// jornadas
// public static int golfistas_jornadas[][] = new int[N][M];
public static int[][] golfistas_jornadas = { { 10, 12, 10, 14 }, { 11, 9, 13, 14 }, { 12, 11, 10, 14 },
{ 10, 13, 10, 10 }, { 10, 15, 12, 12 } };

public static void main(String[] args) {
int[] punt_golf = new int[N];
// rellenaMatriz();
muestraResultados();
calculaPuntosDeJornada(punt_golf);

}

private static void calculaPuntosDeJornada(int[] punt_golf) {
int primero = 99, segundo = 99, tercero = 99;
int golpes[] = { primero, segundo, tercero };


// i=golfista
// j=jornada
int j = 0,  cont,  k ;
while (j < M) {
int v_final[] = new int[5];
//for (int i = 0; i < golfistas_jornadas.length; i++) {
int num=0, x=0, z = 0;
int v_aux[] = new int[5];

for (int p = 0; p <5; p++) {
cont = 0;
num = golfistas_jornadas[p][j];
v_aux[x] = num;
x++;
for (k = 0; k < 5; k++)
if (v_aux[k] == num)
cont++;

if (cont == 1) {
v_final[z] = num;
z++;
}
}
System.out.println("Vector final eliminando repetidos\n" + Arrays.toString(v_final));

int i2=0, temp=0, j2=0;

for (i2 = 1; i2 < v_final.length; i2++) {
temp = v_final[i2];
j2 = i2 - 1;
while ((j2 >= 0) && (v_final[j2] > temp)) {
v_final[j2 + 1] = v_final[j2];
j2--;
}
v_final[j2 + 1] = temp;
}
System.out.println("Vector final ordenado\n" + Arrays.toString(v_final)); 
 
  //}
for (int i = 0; i < v_final.length; i++) {
if (v_final[i] < golpes[0] && v_final[i]>0) {
  golpes[0]=v_final[i];
  }
 
if (v_final[i] < golpes[1] && v_final[i]>0 && v_final[i]>golpes[0]) {
  golpes[1]=v_final[i];
  }
if (v_final[i] < golpes[2] && v_final[i]>0 && v_final[i]>golpes[1]) {
  golpes[2]=v_final[i];
  }

}
System.out.println("Vector golpes\n" + Arrays.toString(golpes));

for (int i = 0; i < golfistas_jornadas.length; i++) {
if (golfistas_jornadas[i][j]==golpes[0]){
punt_golf[i]+=3;
}
if (golfistas_jornadas[i][j]==golpes[1]){
punt_golf[i]+=2;
}
if (golfistas_jornadas[i][j]==golpes[2]){
punt_golf[i]+=1;
}
System.out.println("Vector puntos parciales\n" + Arrays.toString(punt_golf));
}
j++;

}

System.out.println("Vector puntos totales\n" + Arrays.toString(punt_golf));
}


A ver si podéis echarme una manita :)
#2
Pues veréis en este codigo que os paso ahora me da el problema que no suma bien las puntuaciones ya que no vacia el vector cada vez que empieza de nuevo.

En cada jornada, el golfista con menor número de golpes obtiene 3 puntos, el segundo con menor
número de golpes obtiene 2 puntos y el tercero con menor número de golpes obtiene 1 punto
(pueden existir varios golfistas con el mismo número de golpes, por lo que hay varios que pueden
obtener 3 puntos, varios que pueden obtener 2 puntos y varios que pueden obtener 1 punto).
Para calcular el número de puntos se usa la función calculaPuntosDeJornada(int [] punt_golf),
que guarda en el vector los puntos que obtiene cada golfista.




Yo he echo lo siguiente
public class golfistas {

final static int N = 5;// golfistas
final static int M = 4;// jornadas
// public static int golfistas_jornadas[][] = new int[N][M];
public static int[][] golfistas_jornadas = { { 10, 12, 10, 14 }, { 11, 9, 13, 14 }, { 12, 11, 10, 14 },
{ 10, 13, 10, 10 }, { 10, 15, 12, 12 } };

public static void main(String[] args) {
int[] punt_golf = new int[N];
// rellenaMatriz();
muestraResultados();
calculaPuntosDeJornada(punt_golf);

}

private static void calculaPuntosDeJornada(int[] punt_golf) {
int primero = 99, segundo = 99, tercero = 99;
int golpes[] = { primero, segundo, tercero };


// i=golfista
// j=jornada
int j = 0,  cont,  k ;
while (j < M) {
int v_final[] = new int[5];
//for (int i = 0; i < golfistas_jornadas.length; i++) {
int num=0, x=0, z = 0;
int v_aux[] = new int[5];

for (int p = 0; p <5; p++) {
cont = 0;
num = golfistas_jornadas[p][j];
v_aux[x] = num;
x++;
for (k = 0; k < 5; k++)
if (v_aux[k] == num)
cont++;

if (cont == 1) {
v_final[z] = num;
z++;
}
}
System.out.println("Vector final eliminando repetidos\n" + Arrays.toString(v_final));

int i2=0, temp=0, j2=0;

for (i2 = 1; i2 < v_final.length; i2++) {
temp = v_final[i2];
j2 = i2 - 1;
while ((j2 >= 0) && (v_final[j2] > temp)) {
v_final[j2 + 1] = v_final[j2];
j2--;
}
v_final[j2 + 1] = temp;
}
System.out.println("Vector final ordenado\n" + Arrays.toString(v_final));  
 
 //}
for (int i = 0; i < v_final.length; i++) {
if (v_final[i] < golpes[0] && v_final[i]>0) {
 golpes[0]=v_final[i];
 }
 
if (v_final[i] < golpes[1] && v_final[i]>0 && v_final[i]>golpes[0]) {
 golpes[1]=v_final[i];
 }
if (v_final[i] < golpes[2] && v_final[i]>0 && v_final[i]>golpes[1]) {
 golpes[2]=v_final[i];
 }

}
System.out.println("Vector golpes\n" + Arrays.toString(golpes));

for (int i = 0; i < golfistas_jornadas.length; i++) {
if (golfistas_jornadas[i][j]==golpes[0]){
punt_golf[i]+=3;
}
if (golfistas_jornadas[i][j]==golpes[1]){
punt_golf[i]+=2;
}
if (golfistas_jornadas[i][j]==golpes[2]){
punt_golf[i]+=1;
}
System.out.println("Vector puntos parciales\n" + Arrays.toString(punt_golf));
}
j++;

}

System.out.println("Vector puntos totales\n" + Arrays.toString(punt_golf));
}



A ver si me podéis echar una mano porque llevo varios día ya para solucionar esto y no hay manera.