Java - función que nos diga el número de veces que aparece consecutivamente un número en un array

 
Vista:

función que nos diga el número de veces que aparece consecutivamente un número en un array

Publicado por Gosling.jr (1 intervención) el 19/09/2017 17:38:45
El problema es el siguiente:
crear una función que nos diga el número de veces que aparece consecutivamente dicho número en una cadena array.
Ejemplos:
Funcion([],1) ==> 0 / lista vacia
Funcion([1],2) ==> 0 /2 nohay en [1]
Funcion([1,3],3) ==> 1
Funcion([1,4,4,3],4) ==> 2 / 4,4 en el array
Funciond([1,1,1,4,3],1) ==> 3 / 1,1,1 en el array
Funcion([1,2,4,3,4,3],3) ==> 1 / 3 nunca es repetido

La Funcion recibe un array , y un int .
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

función que nos diga el número de veces que aparece consecutivamente un número en un array

Publicado por Tom (1559 intervenciones) el 19/09/2017 18:34:11
¿ Problema para quien ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de kip
Val: 97
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

función que nos diga el número de veces que aparece consecutivamente un número en un array

Publicado por kip (20 intervenciones) el 19/09/2017 18:56:11
Algo simple, solo obtener las repeticiones mas no tomar en cuenta las consecutivas sino las totales, podría ser:

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
class Main
{
    public static void main(String[] args)
    {
        int[] numbers = {
            1,
            2,
            3,
            3,
            3
        };
        int numberFind = 3;
        int totalTimes = getTotalTimesIfExist(numbers, numberFind);
        System.out.printf(
            "El número '%d' aparece %d %s en la lista\n",
            numberFind,
            totalTimes,
            (totalTimes > 1 || totalTimes == 0) ? "veces" : "vez"
        );
    }
 
    public static int getTotalTimesIfExist(int[] numbers, int numberFind)
    {
        int totalTimes = 0;
        for (int number: numbers) {
            if (number == numberFind) {
                totalTimes += 1;
            }
        }
        return totalTimes;
    }
}

Puedes guiarte y ajustarlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jose
Val: 130
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

función que nos diga el número de veces que aparece consecutivamente un número en un array

Publicado por Jose (46 intervenciones) el 20/09/2017 17:52:36
bueno para verificar cuantos consecutivos hay, yo lo haría de la siguiente manera
(tomare prestado el algoritmo de kip)
El algoritmo
retorna -1, si el vector esta vació o es nulo.
retorna 0, si no encontró coincidencia
retorna 1, si por lo menos encuentra el número una vez, esto se considera que no esta repetido consecutivamente
mayor a 1, el número de veces que lo encontró repetido consecutivamente, retorna la repetición mayor.
ejemplo:
si busco el 2 en
[2,2,2,1,3,2,2,2,2]: en este caso retorna 4,porque es la mayor repetición encontrada.


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
public static int getTotalTimesIfExist(int[] numbers, int numberFind)
{   boolean match=false;//es para verificar, si en la iteracion anterior hubo coincidencia.
    int totalTimes = 0;
    int totalMax=0;//lleva la repetición más grande encontrada
 
    if(numbers==null || numbers.length<=0)
     return -1;
 
    for (int number: numbers) {
       //si en la iteración anterior no hubo un match, se reinicia el contador
        if(!match){
            //esta setencia es para que no se olvide, la ultima repetición encontrada
             totalMax=Math.max(totalTimes,totalMax);
              totalTimes=0;
         }
       //si el numero a buscar es igual al numero en el vector, entonces match es true.
        match=(number == numberFind);
        if (match) {
            totalTimes += 1;
        }
    }
 
 
    return totalTimes;
}

No es la única forma, de hecho esta la forma re cursiva, que puede llegar a ser más interesante y simple.

posdata: Gosling.jr , sugerencia: cuando preguntes hazlo de forma amable y dejando claro lo que llevas para resolver el problema, y cual es la problemática que tenes que te impide terminarlo, así obtendrás toda la atención de la comunidad, la verdad has tenido suerte que te respondiera, en mi caso fue más que todo fue un poco de lastima, ya que me recuerda cuando estaba en apuros y nadie me ayudaba (de forma directa,porque si sabes utilizar bien el buscador, te sorprenderás de la inagotable de soluciones que existen para el problema que buscas), aparte que el problema es algo interesante.

posdata 2: el algoritmo esta escrito directamente, en este post, por lo cual no lo he podido probar, lo cual hay una gran probabilidad de que tenga más de alguna errata en sintaxis.



saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jose
Val: 130
Ha aumentado 1 puesto en Java (en relación al último mes)
Gráfica de Java

función que nos diga el número de veces que aparece consecutivamente un número en un array

Publicado por Jose (46 intervenciones) el 27/09/2017 17:25:56
El algoritmo que coloque tiene un pequeño problema y es que retorno la variable incorrecta, dando resultados
inesperados XD.

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
public static int getTotalTimesIfExist(int[] numbers, int numberFind)
{   boolean match=false;//es para verificar, si en la iteracion anterior hubo coincidencia.
    int totalTimes = 0;
    int totalMax=0;//lleva la repetición más grande encontrada
 
    if(numbers==null || numbers.length<=0)
     return -1;
 
    for (int number: numbers) {
       //si en la iteración anterior no hubo un match, se reinicia el contador
        if(!match){
            //esta setencia es para que no se olvide, la ultima repetición encontrada
             totalMax=Math.max(totalTimes,totalMax);
              totalTimes=0;
         }
       //si el numero a buscar es igual al numero en el vector, entonces match es true.
        match=(number == numberFind);
        if (match) {
            totalTimes += 1;
        }
    }
 
 
    return totalMax;//corregido, antes retornaba totalTimes.el cual daría resultados incorrectos en ciertas situaciones.
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar