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
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:
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:
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.