Foros del Web » Programación para mayores de 30 ;) » Java »

Controlar las veces que se imprime un valor en un ciclo

Estas en el tema de Controlar las veces que se imprime un valor en un ciclo en el foro de Java en Foros del Web. Estoy haciendo un programa que recibe un arreglo de números introducido por teclado. El programa debe decir la cantidad de veces que se repite cada ...
  #1 (permalink)  
Antiguo 15/10/2011, 19:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 58
Antigüedad: 12 años, 6 meses
Puntos: 0
Controlar las veces que se imprime un valor en un ciclo

Estoy haciendo un programa que recibe un arreglo de números introducido por teclado. El programa debe decir la cantidad de veces que se repite cada número. Por ejemplo si entro los valores: 1,1,1,3,3,4,3,1. Debe de decir que el #1 se repitió 4 veces, el #3 se repitió 3 veces, el #4 se repite 1 vez.

Esa parte la tengo hecha, pero problema viene al darle salida a los datos que me repite lo mismo tantas veces como se repita el número. En el ejemplo anterior, saldría:
Código:
Los números que introdujo son: 1, 1, 1, 3, 3, 4, 3, 1, 
El número 1 se repite 4
El número 1 se repite 4
El número 1 se repite 4
El número 3 se repite 3
El número 3 se repite 3
El número 4 se repite 1
El número 3 se repite 3
El número 1 se repite 4
Pero lo ideal sería que cada uno, solo saliera una vez:
Código:
Los números que introdujo son: 1, 1, 1, 3, 3, 4, 3, 1, 
El número 1 se repite 4
El número 3 se repite 3
El número 4 se repite 1
Este es el código:
Código Java:
Ver original
  1. for(int i=0;i<cantidad;i++){
  2.             vector[i] = s.nextInt();
  3.         }
  4.        
  5.         //Cuenta las veces se repite cada numero
  6.         int j=0;
  7.         for(int i=0;i<cantidad;i++){
  8.             j = 0;
  9.             while(j<cantidad){
  10.                 if(vector[i] == vector[j]){
  11.                     apariciones[i]++;
  12.                 }              
  13.                 j++;
  14.             }
  15.         }
  16.        
  17.         //Muestra los datos
  18.         for(int i=0;i<cantidad;i++){
  19.             System.out.println("\nEl número " +vector[i]+ " se repite " +apariciones[i]);
  20.         }
__________________
La libertad más difícil de conservar es la de equivocarse. - Morris Wes

Lo que faltaba en internet: http://binar10s.blogspot.com/
  #2 (permalink)  
Antiguo 15/10/2011, 20:22
 
Fecha de Ingreso: junio-2009
Mensajes: 84
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Controlar las veces que se imprime un valor en un ciclo

Bueno... creo q de porsi está un poco complicada la forma en q la implementaste, podrías haberhecho mejor q en cada posicion del vector apariciones fuera una forma de representar los valores del arreglo, de tal forma q al pasar por los bucles llegue a obtener:

apariciones [0, 4, 0, 3, 1]
posiciones- 0, 1, 2, 3, 4


A mi se me ocurrio esto:

Usamos el mismo arreglo q nos mensionas, con otros 2 enteros, un Valor Maximo q nos servirá de condicional para detener el bucle for al contar y un Valor cantidad.

El el 1º bucle (for) nos dira quien es el máximo.

Luego tendremos otros 2 bucles for metidos, los cuales, recorrerán todo el arreglo 4 veces (puesto q 4 es el valor maximo).

El 1º recorrido se contarán toods los 1 y al salir del "for" lo imprime.
Luego el contador vuelve a 0 y se vuelve a contar todos los 2, sale del "for" y se imprime, y así sucesivamente.
Código Java:
Ver original
  1. int [] arreglo = {1, 1, 1, 3, 3, 4, 3, 1};
  2. int MaxValue = 0;
  3.  
  4. for(int i = 0; i<arreglo.length; i++) if(MaxValue<arreglo[i]) MaxValue = arreglo[i];
  5.  
  6. for(int a = 1; a <= MaxValue; a++){
  7.     int cantidad = 0;
  8.     for(int i = 0; i<arreglo.length; i++) if(a == arreglo[i]) cantidad++;
  9.     System.out.println("El número "+a+" se repite "+cantidad+" veces");
  10. }

Última edición por Gaudy; 15/10/2011 a las 20:43
  #3 (permalink)  
Antiguo 15/10/2011, 21:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 58
Antigüedad: 12 años, 6 meses
Puntos: 0
Respuesta: Controlar las veces que se imprime un valor en un ciclo

Antes lo tenía así, usando una variable que iba contandos las veces que se repetía, pero después intentado que no salieran todos, lo cambié a un vector, como lo presente.

Tú versión funciona bien, aunque te falto volver "cantidad a 0" para la siguiente iteraciones.
Pero yo estoy tratando de pasar lo que has hecho a la mi código. que solo aparezcan los números que están en el vector y no todos (aunque diga que se repitan 0 veces), sé que en tú versión se puede hacer poniendo una condición if(cantidad != 0) entonces imprime
Pero a mi nada me sale xD, sigue saliéndome repetido :S

En mi caso la variable cantidad, me dice la longitud del arreglo, equivale a vector.lenght (como puedes ver en el código que puse al principio), lo tengo así para limitar la cantidad de elementos que el usuario va a introducir.

Código Java:
Ver original
  1. int MaxValue=0;
  2.          for(int i = 0; i<cantidad; i++)
  3.                 if(MaxValue < vector[i])
  4.                     MaxValue = vector[i];
  5.          System.out.println("El maximo: " +MaxValue);
  6.        
  7.         //Cuenta las veces se repite cada numero
  8.         int veces=0;
  9.         for(int i=0;i<=MaxValue;i++){
  10.             for(int j=0;j<cantidad;j++){
  11.                 if(vector[i] == vector[j])
  12.                     veces++;
  13.             }
  14.             System.out.println("El número " +vector[i]+ " se repite " +veces);
  15.             veces = 0;
  16.         }

Ya entendí por qué me sigue repitiendo, es que el la decisión dentro del for interno la estoy haciendo con el vector[i], entonces si hay números repetidos en el vector, pues también va a repetir el mensaje, quería hacerlo así porque es más eficiente, pero no me complico más.

Gracias!
__________________
La libertad más difícil de conservar es la de equivocarse. - Morris Wes

Lo que faltaba en internet: http://binar10s.blogspot.com/

Última edición por link01; 16/10/2011 a las 09:56

Etiquetas: controlar, imprime, veces, ciclos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:36.