Java - Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

 
Vista:
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Sergio (4 intervenciones) el 26/12/2018 17:20:51
Buenas tardes, me veo obligado a pedir ayuda externa ya que llevo un buen rato pensando como podría hacer este ejercicio pero nada...

He de hacer un programa en que se introducen diferentes numeros e indica cual es el que falta.

Por ejemplo, introduzo 1, 3, 2, 5, 8, 7, 9 y me ha de decir que falta el 4.

Agradezco mucha vuestra ayuda y atención. Adjunto PDF por si no me se explicar correctamente.
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Kabuto (1381 intervenciones) el 26/12/2018 20:35:48
Puedes hacerlo ayudándote con un bucle for.
Lo primera linea de entrada te indica el número total de "piezas del puzzle".
Si te dicen que hay 15 piezas, haces un for que vaya desde el 1 hasta el 15.

Así el for te dará todos los números de piezas posible. Por cada número que te de, has de comprobar si dicho número existe en la secuencia de números que te han dado en la segunda linea de entrada. Si existe, pasas a comprobar el siguiente. Si no existe, ya has encontrado la pieza que falta.

La secuencia de números que te dan en la segunda línea, vas a tener que recogerlos en un objeto de la clase String.
Esta secuencia, serán numeros separados por espacios en blanco.

Para comprobar si cada número que te de el for, existe en dicho String, tienes varias opciones:
- Usar una expresión regular, puede ser algo complicado si no has trabajado con expresiones regulares anteriormente.

- Usar el metodo .contains() que posee la propia clase String. Pero me temo que puede dar respuestas falsas para este ejercicio.
Por ejemplo, supongamos que la secuencia es:
1
String secuencia = "2 3 4 5 6 7 8 9 10";

En esa secuencia falta el "1". Así que si yo le pregunto al objeto String:
1
2
3
4
if (secuencia.contains("1"))
    System.out.println("La cadena contiene el 1");
else
    System.out.println("La cadena NO contiene el 1");

Podríamos pensar que el código me dirá que la cadena NO contiene el 1. Pero en realidad me dirá que SÍ lo contiene, porque el .contains() encontrará el 1 del numero 10 y lo dará por bueno.
¿Cómo evitarlo?
Podríamos poner el 1 entre espacios en blanco al preguntarle a contains(), para que sepa que buscamos ese número individual.
1
2
3
4
if (secuencia.contains(" 1 "))
    System.out.println("La cadena contiene el 1");
else
    System.out.println("La cadena NO contiene el 1");

Pero podría fallar también, si la secuencia fuera como esta:
1
String secuencia = "1 3 4 5 6 7 8 9 10";

Porque en esa secuencia hay un 1, pero solo tiene un espacio blanco a su derecha, no a su izquierda, así que contains() no lo dará por bueno.

Así que me temo que contains() no puede ayudarnos en este caso.

- Usar el metodo split() para convertir el String de la secuencia en un arreglo.
Por ejemplo, si a esta secuencia la dividimos con split() indicando que divida por los espacios en blanco.

1
2
String secuencia = "1 3 4 5 6 7 8 9 10";
String[] arreglo = secuencia.split(" ");

En arreglo ahora tendríamos todos los números de esas secuencias separados --> {"1","3","4","5","6","7","8","9","10"}

Así que podríamos usar un segundo bucle for para recorrer este arreglo (o mejor escribir un método separado del main) y comprobar si los números que nos va dando el primer bucle for, existe dentro de este arreglo o no.

Importante tener en cuenta que el bucle for nos dará numeros con valor int, pero el arreglo tiene valores String. No podemos compararlos directamente, habrá que convertir los int a String, o bien los String a int, para poder hacer la comparacion
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
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Sergio (4 intervenciones) el 26/12/2018 21:07:46
Gracias por tu comentario, no conocía el .contains(), tampoco consideré la posibilidad de hacerlo con un String, solo con Arrays, gracias por tu ayuda, ya me da una buena base
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Billy Joel (876 intervenciones) el 26/12/2018 22:09:22
He visto el PDF y lo resuelvo así:
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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class RompeCabeza {
 
    public static void ordenamientoBurbuja(int[] arreglo) {
        for (int i = arreglo.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (j + 1 <= i && arreglo[j] > arreglo[j + 1]) {
                    int aux = arreglo[j];
                    arreglo[j] = arreglo[j + 1];
                    arreglo[j + 1] = aux;
                }
            }
        }
    }
 
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int total;
        String piezas, salida;
        salida = "";
        do {
            try {
                System.out.print("Introduce la cantidad de piezas totales del puzzle: ");
                total = Integer.parseInt(br.readLine());
                if (total != 0) {
                    System.out.print("Introduce los números de las piezas separados por espacios en blanco: ");
                    piezas = br.readLine();
                    String[] arreglo = piezas.split(" ");
                    int[] v = new int[arreglo.length];
                    for (int i = 0; i < v.length; i++) {
                        v[i] = Integer.parseInt(arreglo[i]);
                    }
                    ordenamientoBurbuja(v);
                    for (int i = 1; i < v.length; i++) {
                        if (v[i - 1] + 1 != v[i]) {
                            salida += "\n" + (v[i - 1] + 1);
                            break;
                        }
                    }
                }
            } catch (IOException | NumberFormatException ex) {
                System.out.println("Hubo un error de lectura, vuelve a intentarlo");
                total = -1;
            }
        } while (total >= 1);
        System.out.println("Salida: " + salida);
    }
}

He probado con la entradas de pruebas y mis salidas quedan así:
1
2
3
4
5
6
7
8
Introduce la cantidad de piezas totales del puzzle: 10
Introduce los números de las piezas separados por espacios en blanco: 1 2 3 5 6 7 8 9 10
Introduce la cantidad de piezas totales del puzzle: 8
Introduce los números de las piezas separados por espacios en blanco: 6 4 3 2 1 8 7
Introduce la cantidad de piezas totales del puzzle: 0
Salida:
4
5

Para resolverlo hago uso del ordenamiento por burbuja, un split y una suma.

Espero que te sirva
Saludos,
;-)
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
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Sergio (4 intervenciones) el 26/12/2018 22:50:57
Agradezco mucho tu respuesta, lamentablemente en mi clase solo hemos dado el método "public static void main" y no se han explicado los 3 imports que has puesto, sería una molestia si me explicaras como funciona tu código?

Lo he probado y funciona muy bien, con más de lo que me pedía el ejercicio y todo!

Un saludo muy fuerte!!
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
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Billy Joel (876 intervenciones) el 26/12/2018 23:11:38
El método/función ordenamientoBurbuja no es mas que una serie de instrucciones englobadas en una línea, ya lo verás mas adelante.
Lo de los imports no es mas que declarar Mmmmmm bueno ya lo hago tan natural que no se ni como explicarlo pero serían clases que no forman parte de lo mas básico para la ejecución de un programa en Java, entonces uno lo que hace es que lo importa, pero seguro que habrás visto algo como:
1
import java.io.*;

Bueno bueno... el código sin el método ordenamientoBurbuja quedaría así:
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
import java.io.*;
 
public class RompeCabeza {
 
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int total;
        String piezas, salida;
        salida = "";
        do {
            try {
                System.out.print("Introduce la cantidad de piezas totales del puzzle: ");
                total = Integer.parseInt(br.readLine());
                if (total != 0) {
                    System.out.print("Introduce los números de las piezas separados por espacios en blanco: ");
                    piezas = br.readLine();
                    String[] arreglo = piezas.split(" ");
                    int[] v = new int[arreglo.length];
                    for (int i = 0; i < v.length; i++) {
                        v[i] = Integer.parseInt(arreglo[i]);
                    }
                    //ordenamiento por burbuja
                    for (int i = v.length - 1; i > 0; i--) {
                        for (int j = 0; j < i; j++) {
                            if (j + 1 <= i && v[j] > v[j + 1]) {
                                int aux = v[j];
                                v[j] = v[j + 1];
                                v[j + 1] = aux;
                            }
                        }
                    }
                    //ordenamiento por burbuja
 
                    for (int i = 1; i < v.length; i++) {
                        if (v[i - 1] + 1 != v[i]) {
                            salida += "\n" + (v[i - 1] + 1);
                            break;
                        }
                    }
                }
            } catch (IOException | NumberFormatException ex) {
                System.out.println("Hubo un error de lectura, vuelve a intentarlo");
                total = -1;
            }
        } while (total >= 1);
        System.out.println("Salida: " + salida);
    }
}

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
sin imagen de perfil
Val: 8
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con ejercicio de numeros y arreglos. Encontrar el numero que falta en una serie

Publicado por Sergio (4 intervenciones) el 26/12/2018 23:26:19
Muchas gracias, hace tiempo vi como era todo el tema de los ordenamientos, pero de forma visual no en programación, agradezco mucho tu ayuda y buscaré información del ejemplo anterior así puedo aprender algo más.
Que vaya bien!
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