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

Problemas con contador

Estas en el tema de Problemas con contador en el foro de Java en Foros del Web. Hola a todos. Necesito ayuda con un pequeño problema que tengo. Resulta que debo hacer un programa que cuente las veces que se repite un ...
  #1 (permalink)  
Antiguo 11/11/2011, 07:58
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Problemas con contador

Hola a todos.

Necesito ayuda con un pequeño problema que tengo.

Resulta que debo hacer un programa que cuente las veces que se repite un numero dentro de una cadena introducida.

Suponiendo que nos introducen por teclado una sequencia de numeros pongamos :

12122121111221211212121211220
Separandolo en grupos de 4 :
1212-2121-1112-2121-1212-1212-1122-0
Y sabiendo que 1212 corresponde a entrada.
Y 2121 corresponde a salida.
Y el 0 corresponde al fin de sequencia.
El programa debe mostrar algo asi :
Numero de entradas : 3
Numero de salidas : 2

De momento estoy intentando hacer algo , pero esta mal desde luego , porque esto es para buscar caracteres en cadenas de texto y aqui estamos trabajando con numeros.
Código:
    
public static void main(String[] args) {
        Scanner datos = new Scanner(System.in);
        System.out.print("Introduzca la sequencia de numeros 1,2 y 0 para terminar ");
        int sequencia = datos.nextInt();

        datos.nextLine();
        String pr= "12122121111221211212121211220";
	 char _toCompare='1';
	int veces=0;
	char []caracteres=pr.toCharArray();
	for(int i=0;i<=caracteres.length-1;i++){
		if(_toCompare ==caracteres[i]){
			veces++;
		}
				
	}
        System.out.println("Se encontro: el numero 1 "+veces+" veces");
    }
}
Agradeceria cualquier ayuda , ya que me encuentro estancado aqui.
  #2 (permalink)  
Antiguo 11/11/2011, 09:37
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Problemas con contador

Porfavor que alguien me de una respuesta sigo estando perdido con este problema
  #3 (permalink)  
Antiguo 11/11/2011, 11:37
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: Problemas con contador

Si comparas lo que quieres hacer con lo que has hecho verás que no tiene nada que ver.

Si tienes que contar grupos de cuatro, lo primero será separar tu cadena en grupos de cuatro.

Después solo tienes que comparar los grupos obtenidos con los buscados.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #4 (permalink)  
Antiguo 11/11/2011, 11:58
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Problemas con contador

Podrias ser algo mas explicito porfavor , esque segun logica , supongo que la cadena de numeros deberia introducirla en un array en grupos de numeros de 4 , pero el problema es que cuando se introduzca el 0 que seria para poner fin al posible bucle , este sera solo de 1 caracter y no de 4 , por lo tanto ando algo perdido con este tema. La logica me la se , eso si la practica no.

Gracias
  #5 (permalink)  
Antiguo 11/11/2011, 12:02
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Problemas con contador

de momento lo he hecho en plan chorra , pero esque no se hacerlo con un array porfavor que alguien me ayude , yo lo he hecho asi por el momento :

Código:
package eac2_001;

//Importamos la biblioteca que vamos a usar.
import java.util.Scanner;

public class Eac2_001 {

    public static void main(String[] args) {
        Scanner datos = new Scanner(System.in);
        //Declaramos las variables.
        int entradas = 0;
        int salidas = 0;
        int i = 1;
        //Creamos el bucle.
        do {         
            //Pedimos que nos introduzcan por teclado el primer numero de secuencia.
            System.out.print("Introduzca el primer digito de secuencia o 0 para terminar ");
            int primerdigito = datos.nextInt();
            datos.nextLine();
            //Condiciones de fin de bucle si nos introducen "0"
            if(primerdigito == 0){
                System.out.println("Programa terminado ");
                break;
            }
            System.out.print("Introduzca el segundo digito de secuencia o 0 para terminar ");
            int segundodigito = datos.nextInt();
            datos.nextLine();
            if(segundodigito == 0){
                System.out.println("Programa terminado ");
                break;
            }
            System.out.print("Introduzca el tercer digito de secuencia o 0 para terminar ");
            int tercerdigito = datos.nextInt();
            datos.nextLine();
            if(tercerdigito == 0){
                System.out.println("Programa terminado ");
                break;
            }
            System.out.print("Introduzca el cuarto digito de secuencia o 0 para terminar ");
            int cuartodigito = datos.nextInt();
            datos.nextLine();
            if(cuartodigito == 0){
                System.out.println("Programa terminado ");
                break;
            }
            //Averiguamos si la secuencia nos da salida o entrada.
            if (primerdigito == 1 && segundodigito == 2 && tercerdigito == 1 && cuartodigito == 2){
                //Sumamos una entrada si es el caso.
                entradas = entradas +1;
            } 
            if (primerdigito == 2 && segundodigito == 1 && tercerdigito == 2 && cuartodigito == 1){
                //Sumamos una salida si es el caso.
                salidas = salidas +1;
            }
        } while (i>0);
        //Mostramos los resultados por pantalla.
        System.out.println("Entradas encontradas: " + entradas + " tractores");
        System.out.println("Salidas encontradas: " + salidas +" tractores");
    }
}
  #6 (permalink)  
Antiguo 11/11/2011, 12:19
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: Problemas con contador

O no te he entendido bien o vas por un camino muy retorcido.

Para recuperar la secuencia que quieres analizar tienes dos opciones

1) Que se escriba toda seguida, y al pulsar enter la recuperas completa como cadena, es lo más lógico teniendo en cuenta lo que quieres hacer.

2) Dígito + enter, dígito + enter..., y los vas uniendo en una sola String hasta que aparezca el 0. Para hacerlo así no puedes guardarlos directamente en un array a menos que conozcas la cantidad de números que se van a introducir.

Después partes esa cadena en subcadenas de 4, los guardas en un array y recorres el array comparando cada elemento con las secuencias que buscas.

http://download.oracle.com/javase/1....8int,%20int%29
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 11/11/2011, 12:53
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Problemas con contador

Vamos si lo he entendido bien deberia hacer con un substring que me vaya sacando los numeros de 4 en 4 , la question es como se cuatnos numeros me han introducido ?

porque si porejemplo se que son 12+ el 0 los separaria asi

primercuarteto = numeros.substring(0, 4) ( nos devolveria supongo los primeros 4

segundocuarteto = numeros.substring(4, 8) ( los siguientes 4 )

tercercuarteto = numeros.substring(8, 12) ( los ultimos 4 )

elcero = numeros.substring(12, 16) ( nos daria como resultado el 0 a pesar de k el rango sea mayor)

Pero al no saber cuantos numeros me van a introducir como lo hago ?

Gracias , odio ser tan pesado pero quiero enterarme bien
  #8 (permalink)  
Antiguo 11/11/2011, 13:11
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: Problemas con contador

Vamos a ver, nunca sabes cuantos números van a introducir hasta que los han introducido todos.

Contar el número de caracteres que tiene una cadena es trivial (revisa la api)

Sabes que el último número es siempre 0, ¿por qué ibas a querer llegar hasta la posición 13 si sabes que es un 0? Cortas por múltiplos de 4 hasta que llegues a la penúltima posición.

Luego entrarían otras cosas como si en vez de 12+0 ponen 13+0, si algún número es distinto de 1,2,0...

Todo eso puedes controlarlo fácilmente leyendo los métodos de String de la API, si tienes que programar en java, es hora de que los vayas aprendiendo.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #9 (permalink)  
Antiguo 11/11/2011, 14:27
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Problemas con contador

Hola de nuevo , gracias a tus consejos he conseguido sacar adelante esto :

Código:
package eac2_001.pkg2;
import java.util.Scanner;
/**
 *
 * @author Toni
 */
public class Eac2_0012 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Scanner datos = new Scanner(System.in);
        System.out.print("Introduzca la sequencia de numeros 1,2 y 0 para terminar ");
        String secuencia = datos.nextLine();
        datos.nextLine();

        int entradas = 0;
        int salidas = 0;
        int erroneos = 0;
        int longitud = 0;
        int cuartetos = 0;
        int index = 0;
        int ini = 0;
        int fin = 4;
        String primero ="";
        String pr = secuencia;
        longitud = pr.length();
        cuartetos = longitud -1;
        index = cuartetos /4 + 1;
        while (index > 1){
            primero = pr.substring(ini, fin);
            ini = ini + 4;
            fin = fin + 4;
            index = index -1;
            System.out.println("Inicio :"+ini);
            System.out.println("Fin :"+fin);
            System.out.println("Valor :"+primero);
            int valorint=Integer.parseInt(primero.trim());
            if (valorint == 1212){
                entradas = entradas + 1;
                System.out.println("Entrada");}
            if (valorint == 2121){
                salidas = salidas + 1;
                System.out.println("Salida");}	
            if ((valorint != 2121) &&(valorint != 1212)){
                erroneos = erroneos + 1;
                System.out.println("Error");}
    
	}
        System.out.println("Entradas : "+entradas);
        System.out.println("Salidas :"+salidas);
        System.out.println("Secuencias erroneas :"+erroneos);
        
    }
}
Si se puede mejorar algo dimelo , aunque asi funciona bastante bien.
  #10 (permalink)  
Antiguo 11/11/2011, 15:00
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 7 meses
Puntos: 306
Respuesta: Problemas con contador

Funciona y lo desarrollaste tú, que es lo que importa.

Otra forma

Código Javascript:
Ver original
  1. Scanner datos = new Scanner(System.in);
  2.  
  3.             System.out.print("Introduzca la sequencia de numeros 1,2 y 0 para terminar \n>");
  4.             String secuencia = datos.nextLine();
  5.            
  6.             int longitud = secuencia.length();
  7.             int sobran = longitud % 4;
  8.             int ultima = 0;
  9.             int entradas = 0;
  10.             int salidas = 0;
  11.             int errores = 0;
  12.             String cuarteto  ="";
  13.            
  14.             if (longitud<5)
  15.                 System.out.println("Numeros insuficientes");
  16.             else{
  17.                
  18.                 ultima = longitud - sobran;
  19.                
  20.                 for (int i=0;i<ultima;i=i+4 ){
  21.                    
  22.                     cuarteto = secuencia.substring(i, i+4);
  23.                    
  24.                     if(cuarteto.equals("1212"))
  25.                         entradas++;
  26.                     else if (cuarteto.equals("2121"))
  27.                         salidas++;
  28.                     else
  29.                         errores++;
  30.                 }
  31.                
  32.                
  33.                 System.out.println("Entradas " + entradas);
  34.                 System.out.println("Salidas " + salidas);
  35.                 System.out.println("Errores " + errores);

Ahora te falta probarlo con casos erróneos/raros, e ir corrigiendo el programa para que funcione siempre.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #11 (permalink)  
Antiguo 11/11/2011, 15:13
 
Fecha de Ingreso: noviembre-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 2
Respuesta: Problemas con contador

Gracias por todas las respuestas y por la diferente forma de hacerlo , ahora ire probando que funcione bien , e ir incluyendo controles de errores por las posibles introducciones erroneas.

Saludos

Etiquetas: contador, string
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:57.