dave-egibide / ud2-elementos-programa Goto Github PK
View Code? Open in Web Editor NEWThis project forked from imejpul/ud2-elementos-programa
Ejercicios de programación estructurada.
License: Apache License 2.0
This project forked from imejpul/ud2-elementos-programa
Ejercicios de programación estructurada.
License: Apache License 2.0
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)));
Reescríbelo.
En vez de esto:
if ((new String("F").equals(x))) {
Escribe:
if (x.equals("F")) {
Queda más claro y funciona igual.
Revisa esas comparaciones, no es el mejor modo de escribirlas.
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.
Antes de dejar al programa esperando en el br.readLine()
, muestra siempre un mensaje que le diga al usuario qué debe hacer.
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?
Simplifícalo.
Utiliza System.out.format() en vez de la clase que has usado.
Si te encuentras con que has escrito esto, cámbialo por un while:
for (int lista = 2; x >= lista; ) {
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.
Te has complicado la vida para comprobar que son enteros. Bastaba con usar int
como tipos de datos.
Este ejercicio debería hacerse con un bucle for
.
Compara éste con el tuyo.
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
.
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
.
Simplifica las variables de (1) y retoca el (2).
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?
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.
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?
}
No entiendo el objetivo de esto:
if (area % 1 == 0) {
System.out.println(df.format(area));
} else {
System.out.println(area);
}
Cuidado:
if (dinero >= precio) {
System.out.println("Dinero insuficiente");
}
Si dinero == precio
, no es insuficiente, es importe exacto, sin cambio.
La variable start
nunca cambia de valor. ¿Seguro que vale para algo?
Analiza la validación de datos, a ver si hace lo que debe.
} 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
.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.