Hola
Ejercicio 1 lo resuelves usando dos bucles for anidados, cada uno se va a repetir las veces que indique el valor ingresado por teclado.
El bucle interno escribiría en la misma línea un asterisco cada vez que se repita.
El bucle externo, lo que hace es repetir este bucle interno y cuando termina cada repetición, hace un salto de línea para que el bucle interno siga escribiendo asteriscos en la línea siguiente.
ES más fácil de lo que parece, intenta hacerlo.
Si no te sale, pregunta por aquí o si quieres fíjate en el código que pongo a continuación.
Pero importante que primero lo intentes tú, aunque te salga un horror de código que no sirva para nada.
Se aprende más intentando y fallando, que copiando directamente una solución.
public class Ej1 {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
System.out.print("Ingrese valor: ");
int valor = teclado.nextInt();
teclado.close();
/*
* Usamos dos bucles anidados para crear el cuadrado.
* Si pensamos en el cuadrado como una tabla de asteriscos,
* el primer bucle crearía las FILAS
* y el segundo las COLUMNAS
*/
for (int fila = 1; fila <= valor; fila++) {
for (int columna = 1; columna <= valor; columna++)
System.out.print("*");
System.out.println();//Salto de línea para pasar a la siguiente FILA
}
}
}
El segundo ejercicio.
Hay cuatro opciones y recomiendo "modular" el código. Es decir, que cada opción sea un procedimiento escrito por separado del código principal.
El
main, el código principal, solo debería presentar menú y pedir opción. Que se repita hasta que el usuario elija terminar el programa.
Con un switch, analiza la opción ingresada y llamaría al procedimiento correspondiente según dicha opción.
Este podría ser el código del main. Como digo, lo que hace es invocar los procedimientos que resuelven cada opción del menú
public static void main(String[] args) {
int opcion = 0;
do {
System.out.println("\n\t\tMENU\n");
System.out.println("(1) - Leer 20 numeros");
System.out.println("(2) - Leer palabras");
System.out.println("(3) - Veces se repite una palabra");
System.out.println("(4) - Leer 2 numeros");
System.out.println("(5) - CERRAR PROGRAMA");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
leer20numeros();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 2:
leerPalabras();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 3:
vecesRepitePalabra();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 4:
leer2numeros();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 5:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("Opcion equivocada");
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
}
}while(opcion != 5);
}
El código de cada opción, no es difícil.
Opcion 1, leer 20 números y sumar por separado los pares y los impares.Declaramos dos variables acumuladora, una para suma pares y la otra para los impares
Usas un bucle for que lea acepte 20 números por teclado.
Cada vez que se ingresa un número, se comprueba si es par o impar y se acumula en la variable correspondiente.
Podemos saber si un número es par dividiéndolo por 2 y comprobar si el resto es 0, es decir, usamos el operador "módulo", que en Java está representado con el operador %
Cuando termina el bucle, se muestran ambas sumas en pantalla.
Te dejo una solución, pero de nuevo insisto en la importancia de que primero lo intentes tú por tu cuenta.
private static void leer20numeros() {
int sumaPares = 0, sumaImpares = 0;
for (int i = 1; i <= 20; i++) {
System.out.println("\nEntrada " + i + "/20");
System.out.print("Ingrese numero: ");
int numero = Integer.parseInt(teclado.nextLine());
if (numero % 2 == 0)
sumaPares += numero;
else
sumaImpares += numero;
}
System.out.println("\nSuma de pares: " + sumaPares);
System.out.println("Suma de impares: " + sumaImpares);
}
Opción 2: Leer varias palabras y que se detenga al leer FIN, y muestre todas las palabras que se leyeron.Hay que usar un bucle while y que pida palabras para ir coleccionándolas.
El bucle while se repite mientras la palabra ingresada sea distinto de "FIN".
Al terminar el bucle, se muestran las palabras ingresadas.
Para coleccionar las palabras, hay varias fórmulas.
Una podría ser usar una estructura de datos dinámica como List,ArrayList, etc..
Otra podría ser usar un String e ir concatenando las palabras una tras otra, intercalando una coma o un espacio en blanco entre cada palabra.
Sin embarco, los objetos String son "inmutables", no se pueden modificar. Entonces, cuando concatenamos Strings, nos parece que los estamos modificando, pero en realidad se está creando un objeto nuevo, y los otros objetos String que hemos usado para concatenar, no desaparecen. Se quedan en memoria ocupando recursos hasta que termine el programa.
A efectos prácticos, esto no es problema para un ejercicio tan sencillo, pero no esta de más que intentemos que nuestro código sea lo más eficiente posible.
Así que para evitar esto, podemos usar la clase StringBuilder.
Esta clase nos da un objeto similar a un String que sí es "mutable" y podremos concatenarle todos los String que queramos sin que eso suponga desperdiciar recursos.
Pero bueno, en cualquier caso, estas tres formas de solucionarlo son válidas.
Yo he optado por usar StringBuilder:
private static void leerPalabras() {
/*
* Las palabras a leer se podrían concatenar en un
* String normal. Pero internamente un String es estático,
* no se puede modificar, así que cuando concatenamos dos
* String, no estamos modificando ninguno, estamos creando un
* tercer String nuevo. Esto supone consumir más recursos del sistema.
*
* StringBuilder es un objeto dinámico, si es modificable y las concatenaciones
* que hagamos no implican crear nuevos objetos, solo modificar el ya existente.
*/
StringBuilder palabras = new StringBuilder();
String palabra = "";
while (!palabra.equals("FIN")) {
System.out.print("Ingrese palabra (FIN para terminar): ");
palabra = teclado.nextLine();
if (!palabra.equals("FIN")) {
palabras.append(palabra);
palabras.append(" ");
}
}
System.out.println("\nPalabras ingresadas:");
System.out.println(palabras.toString());
}
Opción 3: Leer 30 palabras y mostrar cuantas veces esta una determinada palabra. La palabra a buscar debe leerse antes de ingresar las 30 palabras. Primero pedimos la palabra a buscar.
Luego las 30 palabras donde debemos buscar.
Como ya sabemos de antemano que han de ser 30 palabra, esta vez para coleccionar estas palabras podemos usar un simple array de String.
Cuando tengamos las 30 palabras, recorremos el array con un bucle y cada palabra la comparamos con la que estamos buscando.
Si son iguales, aumentamos una variable contador.
Luego mostramos resultado
private static void vecesRepitePalabra() {
System.out.print("\nIngrese palabra a buscar: ");
String palabra = teclado.nextLine();
System.out.println("A continuación ingrese 30 palabras...");
String[] palabras = new String[30];
for (int i = 0; i < 30; i++) {
System.out.println("\nEntrada " + (i+1) + "/30");
System.out.print("Palabra: ");
palabras[i] = teclado.nextLine();
}
//Contamos repeticiones
int repite = 0;
for (String p: palabras)
if (p.contentEquals(palabra))
repite++;
//Resultado
System.out.println("\nLa palabra " + palabra + " se repite " + repite + " veces.");
}
Opción 4: Leer 2 números. El primero debe estar entre 5 y 50 y el segundo no debe ser par.
Entregar como resultado la suma de los dos números, en caso de que sean correctos los
valores, en caso contrario mostrar un mensaje de error.Muy sencillo, pedimos dos números.
Comprobamos si el primero está entre 5 y 50.
Si no lo está, mensaje de error y se acabó.
Si es correcto, comprobamos el segundo número.
Si no lo es, mensaje error y fin.
Si es correcto, pues mostramos la suma de ambos números.
private static void leer2numeros() {
int num1 = 0, num2 = 0;
System.out.print("\nPrimer numero (entre 5 y 50): ");
num1 = Integer.parseInt(teclado.nextLine());
System.out.print("Segundo numero (ha de ser impar): ");
num2 = Integer.parseInt(teclado.nextLine());
if (num1 < 5 || num1 > 50)
System.out.println("ERROR (numero 1 no está entre 5 y 50)");
else if (num2 % 2 == 0)
System.out.println("ERROR (el segundo número es par)");
else
System.out.println("Suma de numeros: " + (num1 + num2));
}
Y eso es todo, a continuación de dejo el código de esta clase al completo, main y procedimientos.
E insisto una vez más, intenta comenzar tú un código, no importa si sale mal o si apenas llegas a escribir 5 líneas antes de atascarte.
Es así como se aprende, cometiendo errores.
Cualquier duda que tengas, pregúntala por aquí.
Un saludo.
public class Ej2 {
/*
* Objeto Scanner lo declaramos en ámbito global para que
* sea accesible a todos los métodos/procedimientos y
* puedan utilizarlo
*/
private static Scanner teclado = new Scanner(System.in);
public static void main(String[] args) {
int opcion = 0;
do {
System.out.println("\n\t\tMENU\n");
System.out.println("(1) - Leer 20 numeros");
System.out.println("(2) - Leer palabras");
System.out.println("(3) - Veces se repite una palabra");
System.out.println("(4) - Leer 2 numeros");
System.out.println("(5) - CERRAR PROGRAMA");
opcion = Integer.parseInt(teclado.nextLine());
switch(opcion) {
case 1:
leer20numeros();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 2:
leerPalabras();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 3:
vecesRepitePalabra();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 4:
leer2numeros();
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
break;
case 5:
System.out.println("\n\t\tFIN DE PROGRAMA");
break;
default:
System.out.println("Opcion equivocada");
System.out.println("\nPulse INTRO para volver al menu");
teclado.nextLine();
}
}while(opcion != 5);
}
private static void leer20numeros() {
int sumaPares = 0, sumaImpares = 0;
for (int i = 1; i <= 20; i++) {
System.out.println("\nEntrada " + i + "/20");
System.out.print("Ingrese numero: ");
int numero = Integer.parseInt(teclado.nextLine());
if (numero % 2 == 0)
sumaPares += numero;
else
sumaImpares += numero;
}
System.out.println("\nSuma de pares: " + sumaPares);
System.out.println("Suma de impares: " + sumaImpares);
}
private static void leerPalabras() {
/*
* Las palabras a leer se podrían concatenar en un
* String normal. Pero internamente un String es estático,
* no se puede modificar, así que cuando concatenamos dos
* String, no estamos modificando ninguno, estamos creando un
* tercer String nuevo. Esto supone consumir más recursos del sistema.
*
* StringBuilder es un objeto dinámico, si es modificable y las concatenaciones
* que hagamos no implican crear nuevos objetos, solo modificar el ya existente.
*/
StringBuilder palabras = new StringBuilder();
String palabra = "";
while (!palabra.equals("FIN")) {
System.out.print("Ingrese palabra (FIN para terminar): ");
palabra = teclado.nextLine();
if (!palabra.equals("FIN")) {
palabras.append(palabra);
palabras.append(" ");
}
}
System.out.println("\nPalabras ingresadas:");
System.out.println(palabras.toString());
}
private static void vecesRepitePalabra() {
System.out.print("\nIngrese palabra a buscar: ");
String palabra = teclado.nextLine();
System.out.println("A continuación ingrese 30 palabras...");
String[] palabras = new String[30];
for (int i = 0; i < 30; i++) {
System.out.println("\nEntrada " + (i+1) + "/30");
System.out.print("Palabra: ");
palabras[i] = teclado.nextLine();
}
//Contamos repeticiones
int repite = 0;
for (String p: palabras)
if (p.contentEquals(palabra))
repite++;
//Resultado
System.out.println("\nLa palabra " + palabra + " se repite " + repite + " veces.");
}
private static void leer2numeros() {
int num1 = 0, num2 = 0;
System.out.print("\nPrimer numero (entre 5 y 50): ");
num1 = Integer.parseInt(teclado.nextLine());
System.out.print("Segundo numero (ha de ser impar): ");
num2 = Integer.parseInt(teclado.nextLine());
if (num1 < 5 || num1 > 50)
System.out.println("ERROR (numero 1 no está entre 5 y 50)");
else if (num2 % 2 == 0)
System.out.println("ERROR (el segundo número es par)");
else
System.out.println("Suma de numeros: " + (num1 + num2));
}
}