Git Product home page Git Product logo

ud2-elementos-programa's People

Contributors

dave-egibide avatar ijaureguialzo avatar

ud2-elementos-programa's Issues

Ejercicio 17

Observaciones

Estas repitiendo la lectura dos veces:

System.out.println("Introduzca un valor o escriba FIN para terminar:");
        String x = br.readLine();

        if ((!new String("FIN").equals(x))) {
            do {
                y = Integer.parseInt(x);
                total = y + total;
                if (y < min) min = y;
                if (y > max) max = y;
                System.out.println("Introduzca un valor o escriba FIN para terminar:");
                x = br.readLine();
            } while ((!new String("FIN").equals(x)));

¿Por qué no hacer esto?

            do {

                System.out.println("Introduzca un valor o escriba FIN para terminar:");
                x = br.readLine();

        if ((!new String("FIN").equals(x))) {

                y = Integer.parseInt(x);
                total = y + total;
                if (y < min) min = y;
                if (y > max) max = y;
         }

            } while ((!new String("FIN").equals(x)));

Mejoras necesarias

Reescríbelo.

Ejercicio 10, 11, 17, ...

Observaciones

En vez de esto:

if ((new String("F").equals(x))) {

Escribe:

if (x.equals("F")) {

Queda más claro y funciona igual.

Mejoras necesarias

Revisa esas comparaciones, no es el mejor modo de escribirlas.

Uso de DecimalFormat

Reescribe los ejercicios sin usar el DecimalFormat y eligiendo bien el tipo de dato. Si necesitas un entero usa int y si necesitas decimales double, pero no trabajes siempre con double y conviertas a entero, te acabará dando problemas.

Ejercicio 1

Antes de dejar al programa esperando en el br.readLine(), muestra siempre un mensaje que le diga al usuario qué debe hacer.

Ejercicio 14

Observaciones

Esto:

if (x < 0) {
            for (int countdown = 0; countdown > x; countdown--) {
                cuadrado = x + cuadrado;
            }
            cuadrado = cuadrado * -1;
            System.out.print("El cuadrado de ");
            System.out.print(x);
            System.out.print(" es ");
            System.out.println(cuadrado);

        } else {
            for (int countdown = 0; countdown < x; countdown++) {
                cuadrado = x + cuadrado;
            }
        }

Lo puedes convertir en:

if (x < 0) {
    x = x * -1;
}

            for (int countdown = 0; countdown < x; countdown++) {
                cuadrado = x + cuadrado;
            }

¿No?

Mejoras necesarias

Simplifícalo.

Ejercicio 19

Observaciones

Si te encuentras con que has escrito esto, cámbialo por un while:

for (int lista = 2; x >= lista; ) {

Mejoras necesarias

Ninguna, aunque el algoritmo es un poco oscuro.

Aprovechando el algoritmo del ejercicio 18, podrías usar una estructura como:

for() { // Generar la secuencia de números que vamos a comprobar si son primos 
  // Algoritmo de comprobación del ejercicio 18
}

Quedaría más claro.

Ejercicio 3

Te has complicado la vida para comprobar que son enteros. Bastaba con usar int como tipos de datos.

Ejercicio 8

Este ejercicio debería hacerse con un bucle for.

Compara éste con el tuyo.

Ejercicio 16

Observaciones

(1)

En este bloque:

System.out.println("Introduzca un valor:");
        do {
            x = Integer.parseInt(br.readLine());
            if (x <= 0) {
                System.out.println("Error. Introduzca un valor positivo:");
            } else fact = x;
        } while (fact <= 0);

Usas dos variables para conseguir un valor. Quedaría más sencillo si usaras fact tanto para leer como para comprobar si es válida, y te ahorrarías esa copia "rara" que haces a x.

(2)

Si usas un for:

for (int count = x; count > 2; ) {
            --count;
            x = x * count;
        }

El decremento debería formar parte de la repetitiva. Por ejemplo:

for (int count = x; count > 2; --count ) {
            x = x * count;
        }

Si quieres dejarlo fuera, desmonta el bucle entero y conviértelo en un while.

Mejoras necesarias

Simplifica las variables de (1) y retoca el (2).

Ejercicio 13

Reto

Simplifica esta parte del programa en un solo if y un solo for:

                if ((new String("par").equals(x))) {
                    int par = 0;

                    System.out.println("Los 100 primeros números pares son:");
                    for (int count = 0; count < 99; count++) {
                        System.out.print(par);
                        System.out.print(", ");
                        par = par + 2;
                    }
                    System.out.println("198.");
                    end = true;

                    } else {
                    if ((new String("impar").equals(x))) {
                        int impar = 1;

                        System.out.println("Los 100 primeros números impares son:");
                        for (int count = 0; count < 99; count++) {
                            System.out.print(impar);
                            System.out.print(", ");
                            impar = impar + 2;
                        }
                        System.out.println("199.");
                        end = true;

                    } else {
                        System.out.println("Operación invalida");
                    }
                }

¿No notas cierta repetición?

Ejercicio 18

Observaciones

En este ejercicio, el bucle no puede ser un for, porque no sabes cuando se va a detener. Puede que encuentres un factor antes de llegar al final de la secuencia, así que no puede ser un bucle que se repita n veces.

La condición compuesta da una pista:

for (int count = 2; count < x && !end; ) {

Hay dos situaciones por las que el bucle termina.

Además, el bucle no está controlado sólo por su propia condición, el if también interviene y no debería.

Mejoras necesarias

Reescribe el programa usando esta estructura:

while() { // Repite si no has llegado al número y no has conseguido división exacta
}
if() { // Comprueba qué ha pasado en el bucle, ¿has llegado al final o no?
}

Ejercicio 4

No entiendo el objetivo de esto:

if (area % 1 == 0) {
                        System.out.println(df.format(area));
                    } else {
                        System.out.println(area);
                    }

Ejercicio 12

Observaciones

(1)

Cuidado:

 if (dinero >= precio) {
                    System.out.println("Dinero insuficiente");
                }

Si dinero == precio, no es insuficiente, es importe exacto, sin cambio.

(2)

La variable start nunca cambia de valor. ¿Seguro que vale para algo?

Mejoras necesarias

Analiza la validación de datos, a ver si hace lo que debe.

Ejercicio 6

           } catch (NumberFormatException e) {
                    System.out.println("Operación invalida. Introduzca un valor numérico.");
                }
            } while (end == 0);

No te compliques tanto. Si no se pide, no lo desarrolles.

Otro detalle, esa variable end que usas como un flag, estaría mejor siendo boolean.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.