Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: nikiton en 14 de Octubre 2020, 00:08

Título: Ejercicios resueltos programación Java sentencia do while listas validar entrada
Publicado por: nikiton en 14 de Octubre 2020, 00:08
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ú:


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: ");
}
}

Título: Re:Ejercicio listas JavaS
Publicado por: daenius 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í (https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_Java/Sentencia_do-while)

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.
Título: Re:Ejercicio listas JavaS
Publicado por: nikiton 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.
Título: Re:Ejercicio listas JavaS
Publicado por: nikiton 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;

}

}
Título: Re:Ejercicio listas JavaS
Publicado por: daenius 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.
Título: Re:Ejercicio listas JavaS
Publicado por: Kabuto 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.
Título: Re:Ejercicio listas JavaS
Publicado por: daenius 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");
}

}

}

}

Título: Re:Ejercicio listas JavaS
Publicado por: nikiton 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