Autor Tema: Ejercicios resueltos programación Java sentencia do while listas validar entrada  (Leído 3315 veces)

nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Hola, me ha tocado hacer este ejercicio y bueno soy nuevo en esto y quería ver la solución. He hecho el menú y el primer caso pero me da error ya que me he confundido mucho

Ejercicio:Crear un programa con el siguiente menú:

  • Opción ingresar palabra: leer palabra y guardar en una lista. Verificar que la palabra a
    guardar no contenga números. Si la palabra contiene números se debe mostrar un
    mensaje de error.
  • Opción Mostrar palabras: muestra todas las palabras que se han ingresado. Si la lista
    está vacía debe mostrar un mensaje indicándolo.
  • Opción buscar palabra: busca una determinada palabra e indica cuántas veces está
    en la lista.
  • Opción modificar palabra: modifica todas las palabras que comienzan con una
    determinada letra. Cambiar la palabra por MODIFICADA.
  • Opción salir: sale del programa

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Ejercicio6 {

public static void main(String[] args) {
String palabra;
Scanner sc=new Scanner(System.in);
Object array=new String();
int opcion
do {
menu();
opcion=sc.nextInt();
switch(opcion) {
case 1:
System.out.println("Introduzca la palabra:");
for(int i=0; i<=20; i++) {
palabra=sc.nextLine();
array[i]=palabra;
}
case 2:
System.out.println("Las palabras ingresadas es: \n"+ Arrays.toString((long[]) array));


}

}
}
}



public static void menu() {
System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabras");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar número");
System.out.print("\n4. Modicar número");
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
}
}

« Última modificación: 30 de Octubre 2020, 09:25 por Ogramar »

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #1 en: 14 de Octubre 2020, 20:59 »
Hola,

El código que has puesto estaba lleno de errores por todas partes. Te he puesto comentarios por varios sitios. En especial mencionarte que el do necesitaba la sentencia del while. Ahí se escribe la sentencia booleana que cada vez que sea cierta se ejecute todo lo que tienes dentro del bloque del do. Te dejo más información sobre ello aquí

Ten en cuenta que pusiste el código sin la premisa de indicar el paquete en el que estaba. No sé si lo hiciste a propósito o no, pero yo por ejemplo lo he dejado indicado a continuación. Por si no sabes a lo que me refiero, es lo indicado en la primera línea como
Citar
package aprendeaprogramar;

Y otra cosa, cuando declares un array, nunca lo hagas con la clase Object. Usa la suya, eso era otro de los errores que había. Bueno, asando a ponerte el código comentado:

Código: [Seleccionar]
package aprendeaprogramar;

import java.util.ArrayList; //Esto nunca se usa
import java.util.Arrays;
import java.util.Scanner;

public class Ejercicio6 {
public static void menu() {
System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabras");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar número"); //no era buscar palabra?
System.out.print("\n4. Modicar número"); //no era modificar numero?
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
}

public static void main(String[] args) {
String palabra;
Scanner sc=new Scanner(System.in);
//El Scanner nunca se cierra

String[] arra= new String[20];
//La creacion de un array como Object es erronea
//Se pide una lista, no un array
int opcion;
do {
menu();
opcion=sc.nextInt();
switch(opcion) {
case 1:
System.out.println("Introduzca la palabra:");
for(int i=0; i<=20; i++) {
palabra=sc.nextLine();
arra[i]=palabra;
}
case 2:
System.out.println("Las palabras ingresadas es: \n"+ Arrays.toString(arra));


}
}

//Totalmente inventado
while(opcion<2);
System.out.println("Hola");



}
}

Ok, entonces una vez visto que nada me funcionaba he metido bulldozer y me he creado el ejercicio desde 0. Sin embargo, después de estar todo el día haciendo cambios aquí y allá no consigo que me funcione del todo.

Y me dirás "ay (insulto), no me eches la bronca si tu tampoco lo tienes bien". Ya, pero espero que se entienda mejor. De todas formas, no tengo mucho tiempo ahora mismo, y lo suyo es que alguien más diestro que yo postee en donde me estoy equivocando o, en otras palabras, por qué demonios no me funciona el scanner para capturar la palabra que quiero preguntarle al usuario y me vuelve a sacar el menú.

En fin, pongo mi código:

Código: [Seleccionar]
public class Ejercicio6Bien {

// Comprobar si hay digitos en la palabra input
public static Boolean tieneDigitos(String palabra, List<String> l) {

Boolean res = false;

for (int i = 0; i < palabra.length(); i++) {
char c = palabra.charAt(i); // Caracter i-esimo de la palabra
if (Character.isDigit(c)) {
System.out.println("La palabra introducida contiene un numero\n Pruebe de nuevo");
res = true;
break;
}
}

l.add(palabra);

return res;

}

// Numero de veces que una palabra esta en la lista
public static Integer vecesPalabra(String palabra, List<String> l) {
Integer res = 0;

for (int i = 0; i < l.size(); i++) {
if (l.contains(palabra)) {
res++;
}
}
return res;
}

// Sacar las palabras que empiezan por una letra determinada
public static void contieneLetra(String letra, List<String> l) {

for (int i = 0; i < l.size(); i++) {
if (l.get(i).startsWith(letra)) {
System.out.println(l.get(i));

} else {
System.out.println("No hay ninguna palabra que comience por esa letra");
}
}

}

public static void main(String[] args) {

Integer n = 0;
while (n != 5) {
Scanner q = new Scanner(System.in);

System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabra");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar palabra");
System.out.print("\n4. Modicar palabra");
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
Integer a = q.nextInt();

String palabra="";

List<String> palabras = new ArrayList<String>();

if (a == 1) { // Comprobar que la palabra no tiene numeros
System.out.print("\n1. Ingresar palabra:\n" + palabra);
palabra = q.nextLine();
Boolean c = tieneDigitos(palabra, palabras);
if (c == false) {
System.out.println("La palabra no contenia numeros, añadida correctamente");
}

} else if (a == 2) {
System.out.print("\n2. Mostrar palabras");
// Mostramos las palabras de la lista
if (palabras.isEmpty()) {
System.out.println("\nLa lista esta vacia");
} else {
System.out.println("Mostrando lista:\n" + palabras);
}
} else if (a == 3) {
System.out.print("\n3. Buscar palabra");
System.out.println("Introduzca la palabra que quiere buscar:\n");
palabra = q.nextLine(); // guardamos la palabra que
// queremos buscar
Integer suma = vecesPalabra(palabra, palabras);
if (suma == 0) {
System.out.println("La palabra seleccionada no esta en la lista");
} else {
System.out.println("La palabra seleccionada esta " + suma + " veces en la lista");
}
} else if (a == 4) {
System.out.print("\n4. Modificar palabra");
System.out.println("Introduzca la letra por la que buscar palabras:");
// Modificamos una palabra
String letra;
letra = q.nextLine();
contieneLetra(letra, palabras);

} else if (a == 5) {
break;
} else {
System.out.println("Introduce un numero del 1 al 5");
}

}

}

}

Para que se entienda:

En el main he hecho el programa principal, el cuál llama a métodos privados dependiendo de la opción que el usuario elija (las del menú). Para ello he diseñado un while-true que va a ir lanzando por consola el menú de opciones una vez el usuario haya terminado de elegir una opción (para que quiera seguir operando en vez de volver a correr el programa y así, se pierda todo).

De la misma forma, he optimizado un poco el menú de opciones. Así, si el usuario introduce un 5, el while se vuelve a false y se termina el programa. Y si mete un número que no sea del 1 al 5 pues lanza un error. Esto es totalmente opcional y está más enfocado ya a la mejora y detalles de implementación del programa.

En fin, lo dicho, a ver si alguien más se une.

Me da lástima publicarlo así, pero es que no dispongo de mucho más tiempo y si te corre prisa, tienes ya algo.

nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #2 en: 14 de Octubre 2020, 22:04 »
hola muchas gracias por tu ayuda, respecto a el package no lo pego en el código, ya que muchas veces es una molestia xd, y si soy nuevo y muchas cosas las voy confundiendo e revisado cada nota que dejaste, de verdad me ayuda mucho. y nunca la ayuda es un insulto a si que te estoy muy agradecido

Respecto a tu código la idea esta muy bien, intente hacerlo gracias a tu idea pero me travo, y al igual me muestra el error en el scanner como muestro a continuación

Citar
Menú

1. Ingresar palabra
2. Mostrar palabras
3. Buscar palabra
4. Modicar palabra
5. salir
Opción: 1

1. Ingresar palabra:
La palabra no contenia numeros, añadida correctamente

Menú

1. Ingresar palabra
2. Mostrar palabras
3. Buscar palabra
4. Modicar palabra
5. salir
Opción: 1 hola

1. Ingresar palabra:
La palabra no contenia numeros, añadida correctamente

Menú

1. Ingresar palabra
2. Mostrar palabras
3. Buscar palabra
4. Modicar palabra
5. salir
Opción: 2

2. Mostrar palabras
La lista esta vacia

Menú

1. Ingresar palabra
2. Mostrar palabras
3. Buscar palabra
4. Modicar palabra
5. salir
Opción: 3

3. Buscar palabraIntroduzca la palabra que quiere buscar:

La palabra seleccionada no esta en la lista

Menú

1. Ingresar palabra
2. Mostrar palabras
3. Buscar palabra
4. Modicar palabra
5. salir
Opción:

No se si se logra entender pero no me da la opción de ingresar la palabra como muy bien tu indicas.
« Última modificación: 14 de Octubre 2020, 23:08 por nikiton »

nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #3 en: 14 de Octubre 2020, 23:05 »
Para no crear un nuevo foro subo, otro ejercicio, el cual es con un menu y lista, pero en este caso pide una clase.

Crear un programa con el siguiente menú:
Menú:
1. Ingresar mascota
2. Mostrar mascotas
3. Salir
 seleccione opción:
Para este ejercicio debe considerar crear la clase mascota para guardar en una lista
todos los datos de una mascota. Los datos de la mascota son:
• Nombre
• RUT dueño
• Raza
• Teléfono
• Fecha nacimiento
Opción ingresar mascota: Lee los datos de la mascota y los guarda en una lista.
Opción mostrar mascota: Muestra las mascotas que han ingresado. Si no existen
mascotas ingresadas, debe mostrar un mensaje indicándolo.
Opción salir: Sale del programa

He creado la clase, subo mi código, faltaría crear el main pero no e podido avanzar, me trabo en cada paso

Clase mascota
Código: [Seleccionar]
public class mascota {

private String nombre;
private String rutdueno;
private String raza;
private String telefono;
private String fecha_nacimiento;

public mascota() {
nombre = "";
rutdueno = "";
raza = "";
telefono = "";
fecha_nacimiento = "";
}

public mascota(String nombre, String rutdueno, String raza, String telefono, String fecha_nacimiento) {
this.nombre = nombre;
this.rutdueno = rutdueno;
this.raza = raza;
this.telefono = telefono;
this.fecha_nacimiento = fecha_nacimiento;
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

public String getRutdueno() {
return rutdueno;
}

public void setRutdueno(String rutdueno) {
this.rutdueno = rutdueno;
}

public String getRaza() {
return raza;
}

public void setRaza(String raza) {
this.raza = raza;
}

public String getTelefono() {
return telefono;
}

public void setTelefono(String telefono) {
this.telefono = telefono;
}
public String getFecha_nacimiento() {
return fecha_nacimiento;
}

public void setFecha_nacimiento(String fecha_nacimiento) {
this.fecha_nacimiento = fecha_nacimiento;
}



public String toString() {
return "Nombre: " + nombre +
"\nRUTdueno: " + rutdueno +
"\nRaza: " + raza +
"\nTelefono: " + telefono +
"\nFecha_nacimiento: " + fecha_nacimiento;

}

}

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #4 en: 15 de Octubre 2020, 07:32 »
Hola,

Respecto al ejercicio anterior era eso precisamente. Al menos hay captura de lo que me salía por consola. Esperemos que algún crack de Java se pase por aquí.

Respecto al nuevo ejercicio: es tontería que me ponga con ese ya que habría que hacer algo muy similar que el anterior, pero en vez de usar objetos clásicos del lenguaje habría que invocar a un objeto nuestro.

Lo que sí remarcaría de la clase que has subido es que le añaderas un equals() y la función hashcode() por motivos de seguridad. En Internet seguro debes tener información sobre ello, además que si programas desde Eclipse, se hacen solos al invocarlos.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #5 en: 15 de Octubre 2020, 19:42 »
No se si se logra entender pero no me da la opción de ingresar la palabra como muy bien tu indicas.

Hola.

Siempre que en un mismo código queramos leer valores numéricos y cadenas String con Scanner, vamos a tener el problema que mencionáis.

Tras leer un valor numérico, si al siguiente lectura queremos leer un String, esta lectura fallará.

Para evitarlo, lo ideal es hacer SIEMPRE la lectura de cualquier dato con nextLine(), para obtener un String completo.
Y si lo que queremos es un valor numérico, entonces parseamos (transformamos) ese String al tipo de dato que queremos.

Por ejemplo:

Citar
do {
         menu();
         opcion=sc.nextInt();

Ese nextInt() nos da un entero, pero va a impedir que luego podamos leer un String con nextLine().

Para evitar este problema, podemos leer el entero de la siguiente forma:

Citar
do {
         menu();
         opcion=Integer.parseInt(sc.nextLine());

Esa línea lo que hace es leer un String, y automáticamente lo transforma a un entero que es lo que realmente deseamos.
Y de este modo si luego queremos leer otro String, veremos que no tenemos ningún problema.

Puede parecer un poco complicado, pero es la mejor forma (no la única) de evitar este problema, que también ocurre en otros lenguajes como C y C# y se soluciona de forma similar.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #6 en: 15 de Octubre 2020, 21:20 »
Hola,

mil gracias kabuto. Ya sé lo que me fallaba entonces. Lo que más coraje me da es que lo he usado en más de una ocasión....

En fin, he hecho además algunas modificaciones por aquí y por allá. No está lo más perfecto que podría estar pero supongo que algo es algo, ya digo, el factor tiempo me es limitado:

Código: [Seleccionar]

public class Ejercicio6Bien {

static String  palabra="";

static List<String>  palabras = new ArrayList<String>();

static Scanner q = new Scanner(System.in);

// Comprobar si hay digitos en la palabra input
public static Boolean tieneDigitos(String palabra, List<String> l) {

Boolean res = false;

for (int i = 0; i < palabra.length(); i++) {
char c = palabra.charAt(i); // Caracter i-esimo de la palabra
if (Character.isDigit(c)) {
System.out.println("La palabra introducida contiene un numero\n Pruebe de nuevo");
res = true;
break;
}
}

l.add(palabra);

return res;

}

// Numero de veces que una palabra esta en la lista
public static Integer vecesPalabra(String palabra, List<String> l) {
Integer res = 0;

for (int i = 0; i < l.size(); i++) {
if (l.contains(palabra)) {
res++;
}
}
return res;
}

// Sacar las palabras que empiezan por una letra determinada
public static void contieneLetra(String letra, List<String> l) {

String cambiada="";

Boolean chivato =true;
if(chivato){
for (int i = 0; i < l.size(); i++) {
if (l.get(i).startsWith(letra)) {

System.out.println("Introduzca la palabra por la que la quiere cambiar:\n");
cambiada= q.nextLine();
palabras.remove(l.get(i));
palabras.add(cambiada);
System.out.println("La nueva palabra es: " + cambiada);
}
chivato=false;
}
}else{
System.out.println("La palabra buscada no existe");
}



}

public static void main(String[] args) {

Integer n = 0;
while (n != 5) {


System.out.print("\nMenú\n");
System.out.print("\n1. Ingresar palabra");
System.out.print("\n2. Mostrar palabras");
System.out.print("\n3. Buscar palabra");
System.out.print("\n4. Modicar palabra");
System.out.print("\n5. salir");
System.out.print("\nOpción: ");
Integer a = q.nextInt();



if (a == 1) { // Comprobar que la palabra no tiene numeros
System.out.print("\n1. Ingresar palabra:\n" );
q.nextLine();
palabra = q.nextLine();
Boolean c = tieneDigitos(palabra, palabras);
if (c == false) {
System.out.println("La palabra no contenia numeros, añadida correctamente");

}

} else if (a == 2) {
System.out.print("\n2. Mostrar palabras");
// Mostramos las palabras de la lista
if (palabras.isEmpty()) {
System.out.println("\nLa lista esta vacia");
} else {
System.out.println("\nMostrando lista:\n" + palabras);
}
} else if (a == 3) {
System.out.print("\n3. Buscar palabra");
System.out.println("\nIntroduzca la palabra que quiere buscar:\n");
q.nextLine();
palabra = q.nextLine(); // guardamos la palabra que
// queremos buscar
Integer suma = vecesPalabra(palabra, palabras);
if (suma == 0) {
System.out.println("La palabra seleccionada no esta en la lista");
} else {
System.out.println("La palabra seleccionada esta " + suma + " veces en la lista");
}
} else if (a == 4) {
System.out.print("\n4. Modificar palabra");
System.out.println("\nIntroduzca la letra por la que buscar palabras:");
// Modificamos una palabra
String letra;
q.nextLine();
letra = q.nextLine();
contieneLetra(letra, palabras);

} else if (a == 5) {
break;
} else {
System.out.println("Introduce un numero del 1 al 5");
}

}

}

}


nikiton

  • Sin experiencia
  • *
  • Mensajes: 20
    • Ver Perfil
Re:Ejercicio listas JavaS
« Respuesta #7 en: 16 de Octubre 2020, 00:30 »
Muchas Gracias Kabuto y Daenius se pasaron los dos el código funciona perfecto, intentare hacer el main del otro ejercicio y subirlo, de verdad muchas gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".