Java - Completar numeros restantes

   
Vista:

Completar numeros restantes

Publicado por David (13 intervenciones) el 05/03/2018 17:23:26
Buenas tardes:

LLevo dandole vueltas a este ejercicio y no se si por cansancio o que, no soy a dar con la solución.
El problema que tengo es el siguiente, se me pasa un List <Long> el cual tengo he pasado a char para ir leyendo uno a uno, hasta aquí lo he conseguido pero dentro del metodo, no se como sacarlo para el main, el problema es que el resultado tendría que ser los números que faltan. En mi caso tendría que imprimirme 0 7 8 que son los que faltarían.

Os dejo el código a ver si me podeis ayudar.

Muchas gracias de antemano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) {
        List<Long> numeros = new ArrayList<>();
        long p = 13254;
        long o = 69;
        numeros.add(p);
        numeros.add(o);
        digitosQueNoEstanEn(numeros);
        System.out.print(numeros);                 // imprime el array tal cual
 
    }
 
    public static String digitosQueNoEstanEn(List<Long> numeros) {
 
        String tmn = String.valueOf(numeros);
        for (int i = 0; i < tmn.length() - 1; i++) {
            char caracter = tmn.charAt(i);
            if (Character.isDigit(caracter)) {
                System.out.print(caracter);           // prueba para ver si funciona separar numeros
            }
        }
        return tmn;
    }
}
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

Completar numeros restantes

Publicado por Andrés (337 intervenciones) el 05/03/2018 19:06:51
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
public static void main(String[] args)
{
 
	List<Long> numeros = new ArrayList<>();
	long p = 13254;
    long o = 69;
 
	numeros.add(p);
	numeros.add(o);
 
	imprimirFaltantes(digitosQueNoEstanEn(numeros));
 
}
 
public static final void imprimirFaltantes(final long[] numeros)
{
	if(todosEncontrados(numeros)) 						//Se encontraron todos los dígitos
	{
		System.out.println("No faltan dígitos"); 		//No faltan
		return;
	}
 
	System.out.print("Dígitos faltantes: "); 			//Faltan dígitos
 
	for(int i = 0 ; i < numeros.length ; i++) 			//por cada elemento en digitos i. e [0...9]
	{
	    if(0 == numeros[i]) 							//Si el valor es 0 i. e. falta
	    {
			System.out.print(String.format("%d ", i)); 	//Imprimirlo 
		}
	}
}
 
public static final boolean todosEncontrados(final long[] numeros)
{
	boolean todos = true; 						//:) Optimistas, no faltan
 
	for(int i = 0 ; i < numeros.length ; i++) 	//por cada elemento en digitos i. e [0...9]
	{
		if(0 == numeros[i]) 					//Si el valor es 0 i. e. falta
		{
			todos = false; 						//bye optimismo :(, falta
			break;								//terminar el ciclo
		}
	}
 
	return todos;
 
}
 
public static final long[] digitosQueNoEstanEn(final List<Long> numeros)
{
 
	final byte DIEZ = 10;						//arreglo de 10 y divisiones por 10
	long[] digitos = new long[DIEZ];			//digitos i. e [0...9]
 
	byte digito;								//digito, minimo 4 bits
	long numero;								//cada uno de los numeros en numeros
 
	for(Long l : numeros)
	{
		numero = l < 0 ? -l : l;				//pasar a positivo, evitar digitos[-1]++
 
		if(0 == numero)							//número es 0
		{
			digitos[0]++;						//incrementar el valor de 0's
		}
 
		while(numero > 0) 						//mientras el número sea mayor a 0
		{
			digito = (byte)(numero % DIEZ);		//obtener el dígito usando el módulo
			digitos[digito]++;					//incrementar la cantidad para el dígito
			numero /= DIEZ;				    	//dividir el número por 10
		}
 
		if(todosEncontrados(digitos))			//tal vez no se necesite recorrer toda la lista de números
		{
			break;								//terminar el ciclo
		}
 
	}
 
	return digitos;
 
}
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

Completar numeros restantes

Publicado por David (13 intervenciones) el 06/03/2018 12:36:34
Muchas gracias por la respuesta Andrés, me he reido mucho con las anotaciones (optimista) jeje.

Aunque public static String digitosQueNoEstanEn(List<Long> numeros) , tiene que ser String por narices, no me permiten cambiarlo.

Entonces rompiendome la cabeza un poco, viendo tu código y con un poco de ayuda del tutor, hice esto, aunque no soy capaz a hacer una cosa que creo que sera una tonteria hacerlo pero no lo veo, segun tengo entendido tendría que hacerlo a base de los flujos numeros.stream()..... , pero solo soy capaz a que me muestre la misma lista :(.

Te adjunto lo que he hecho de nuevo:

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
public static void main(String[] args) {
        List<Long> numeros = new ArrayList<>();
        long p = 13254;
        long o = 69;
        numeros.add(p);
        numeros.add(o);
        digitosQueNoEstanEn(numeros);
        System.out.println(numeros);
}
 public static String digitosQueNoEstanEn(List<Long> numeros) {
List<Character> digitos = new ArrayList<>();
   for (long n : numeros) {
         for(char c : String.valueOf(n).toCharArray()) {
               digitos.add(c);
         }
     }
   List<Character> d09 = new ArrayList<>(Arrays.asList('0','1','2','3','4','5','6','7','8','9'));  //Lista de digitos
   d09.removeAll(digitos);   //Borrado digitos de la 1º lista
     String result = "";
    for(Character c : d09)
        result += c;
     System.out.println(result);  // Comprobación de que funciona
        return result;
    }
 
}
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

Completar numeros restantes

Publicado por David (13 intervenciones) el 06/03/2018 23:09:46
Bueno al final corte por lo sano y ni flujos ni nada.

Muchas gracias a todos por las molestias, y sobre todo Andrés muchas gracias por la ayuda

Ejercicio resuelto:

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
public static void main(String[] args) {
 
        List<Long> numeros = new ArrayList<>();
 
        long p = 13254;
 
        long o = 69;
 
        numeros.add(p);
 
        numeros.add(o);
 
        System.out.println(digitosQueNoEstanEn(numeros));
 
}
 
 public static String digitosQueNoEstanEn(List<Long> numeros) {
 
List<Character> digitos = new ArrayList<>();
 
   for (long n : numeros) {
 
         for(char c : String.valueOf(n).toCharArray()) {
 
               digitos.add(c);
 
         }
 
     }
 
   List<Character> d09 = new ArrayList<>(Arrays.asList('0','1','2','3','4','5','6','7','8','9'));
 
   d09.removeAll(digitos);
 
     String result = "";
 
    for(Character c : d09)
 
        result += c;
 
        return result;
 
    }
 
}
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