Hola xeta21!
Como hacemos siempre con las personas nuevas indicarte que para pegar código en los foros debes hacerlo según se explica en
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0Tienes que considerar que si haces una extracción aleatoria de palabras es posible que la búsqueda se prolongue sobre manera. Imagina que extraes palabras hasta completar 29 caracteres. Ahora necesitas que al azar salga una palabra de longitud 1 carácter. Si tienes cien palabras tendrás una posibilidad entre 100 de acertar, si tienes 1000 palabras 1 posibilidad entre 1000. Si no tuvieras una palabra de longitud 1 carácter no podrías resolver el problema.
Además deberías considerar el rediseño del código. Hay cosas que no están planteadas de una forma correcta.
Recomendamos seguir este curso paso a paso:
http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188Este código se aproxima a lo que pretendes, pero habría que mejorarlo:
import java.util.Arrays;
import java.util.Random;
public class ObtenerPalabrasAlAzar {
public static void main(String[] args) {
ObtenerPalabrasAlAzar programa = new ObtenerPalabrasAlAzar();
programa.diccionario();
}
void diccionario(){
int Totalpalabras = Total();
String[] diccionario = diccionarioFinal();
String[] palabrasNuevas = RandomPalabras(diccionario , Totalpalabras);
probar (palabrasNuevas);
}
public String[] diccionarioFinal(){
System.out.println("Programa que devuelve palabras al azar ") ;
String[] diccionario = {
"a","alcohol", "ana", "anis", "anita", "an", "anil", "oniel", "anillo", "america"
};
return diccionario;
}
public int Total(){
int Totalpalabras=30;
return Totalpalabras;
}
public String[] RandomPalabras(String[] diccionario , int Totalpalabras){
Random random = new Random();
String[] palabrasNuevas = new String[30];
int total = diccionario.length;
int indice = 0;
int longitudCaracteres = 0;
int longitudPalabraActual = 0;
int intentos = 0;
int i = 0;
boolean insertar;
while(longitudCaracteres < 30 && intentos <= 50){
int numero = random.nextInt(total);
longitudPalabraActual = diccionario[numero].length();
if (longitudCaracteres < 30 && longitudPalabraActual + longitudCaracteres <= 30) {insertar = true;} else {insertar=false;}
if (insertar) {
palabrasNuevas[indice] = diccionario[numero];
System.out.println ("Añadida: "+diccionario[numero] + " con una longitud "+longitudPalabraActual);
longitudCaracteres += diccionario[numero].length();
indice++;
} else {System.out.println ("Rechazada: "+diccionario[numero]); }
System.out.println ("Cuenta: "+longitudCaracteres);
intentos++;
}
return palabrasNuevas;
}
public void probar(String [] palabrasNuevas){
System.out.println() ;
System.out.println("---------------------------------------------------");
System.out.println("El resultado es: ");
System.out.println(Arrays.toString(palabrasNuevas));
System.out.println("---------------------------------------------------");
System.out.println();
}
}
Saludos!