Java - String y Random! ( quitar repetidos )

 
Vista:
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 29/10/2015 21:20:29
Tengo este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package obtenirparaulesalatzar;
import java.util.Random;
 
public class ObtenirParaulesAlAtzar {
 
 
    public static void main(String[] args) {
 
 
 String[] diccionario = {
 "Palabra1",
 "Palabra2",
 "Palabra3"
 // etc, etc etc, 
 };
 
 Random random = new Random();
 
 for( int i=0; i<3; i++){
 String cadena_aleatoria = diccionario[ random.nextInt( diccionario.length ) ];
String resultado = cadena_aleatoria;
 
 
 
          System.out.println(cadena_aleatoria);
 
 }
 
 }
}




Y lo que necesito es que de las palabras aleatorias que me salen que no se me repita ninguna..
Creo que tengo que crear un bucle if haciendo algo como if ( cadena_aleatoria == resultado )
Pero no lo sé 100% y no tengo ideas!

Podéis ayudarme?
gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 30/10/2015 00:09:10
Hola...

No entendí muy bien, lo que buscas es crear un arreglo de palabras y luego quitar los repetidos, pero los repetidos son del mismo arreglo o comparas con una cadena que tu ingresas, podrías especificar esa parte por favor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 30/10/2015 00:26:36
Te explico las palabras salen del string diccionario.

Se trata de ese string que tendrá mas de 300 palabras sacar 50 de las cuales ninguna se puede repetir.

Ea decir saco la palabra
Busco que no este ya en el nuevo array si esta busco otra sino sigo sacando hasta llegar a las 30.

Pero no se como hacerlo.

Gracias por la ayuda

Pd: El random es por que salen del string aleatoriamente no siguiendo un orden
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por Pablo (1 intervención) el 30/10/2015 03:16:12
Podrías usar un compareTo para verificar que la palabra no se repita.
Si la que sale ya existe en tu array, no la metes. Si no, la metes.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 30/10/2015 04:25:45
Hola...

No le veo sentido a tu enunciado; es decir, mencionas que de las 50 palabras ninguna se puede repetir, entonces para que comparas si existen en el otro arreglo si se supone que ya las 50 palabras que obtuviste no están repetidas, solo guarda las primera 30 y listo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por Montse (36 intervenciones) el 30/10/2015 07:44:41
No puedo sacar las 30 primeras tebgo que sacarlas del array diccionario usando el randon.

Por eso al usar el randon se puede dar que de las 30 alguna se repita.

Como utilizó el compareto?
Tenéis ejemplos???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

String y Random! ( quitar repetidos )

Publicado por Tom (1831 intervenciones) el 30/10/2015 13:08:08
Una de 1000 posibles formas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Words {
	String	wordList[];
	Set<String>	used;
	Random	rnd = new Random();
	/* */
	Words(String phrase) {
		wordList = phrase.split(" ");
		used = new TreeSet();
	}
	/* */
	public String getWord() {
		String	res = null;
 
		do {
			res = wordList[rnd.nextInt(wordList.length)];
		} while(!used.add(res) && (used.size() < wordList.length));
 
		return res;
	}
	/* */
	public static void main(String args[]) {
		Words ww = new Words("Hijo nací tercerón de un hidalgo pobretón"
			+ " y si la fiebre amarilla no barre media Castilla"
			+ " me quedo sin una herencia. Paciencia");
 
		for(int i = 0; i < 20; i++) {
			System.out.println("Random word: " + ww.getWord());
		}
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 30/10/2015 13:13:21
Espera que al final es mas complicado

Es decir tengo que :

Sacar de un string array las palabras usando random.

Esas palabras no se pueden repetir y que sean 30 en total. Supongo que con el equals...
hacer la verificacion de que en el nuevo array no esta ya puesta.

Pero tienen que salir de un array no me sirve sacarlas de una cadena string.

Por eso no se hacerlo :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

String y Random! ( quitar repetidos )

Publicado por Tom (1831 intervenciones) el 30/10/2015 13:16:17
Mira bien el código. Salen de un array. Concretamente de Words.wordList.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por Montse (36 intervenciones) el 30/10/2015 13:35:14
Pero necesito que las palabras las coja de ese array no de otro.

Es decir el array tiene ya las palabras.
String [] palabras {"hola". "Que",......}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 30/10/2015 18:25:33
Hola...

Te proporciono lo que hice y ya mencionas si te es de utilidad...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static void main(String[] args) {
	Random random = new Random();
	HashSet<Integer> indicePalabras = new LinkedHashSet<Integer>();
 
	String[] palabras = {"palabra1","palabra2","palabra3","palabra4","palabra5","palabra6","palabra7","palabra8",
			"palabra9","palabra10","palabra11","palabra12","palabra13","palabra14","palabra15","palabra16",
			"palabra17","palabra18","palabra19","palabra20","palabra21","palabra22","palabra23","palabra24",
			"palabra25","palabra26","palabra27","palabra28","palabra29","palabra30","palabra31","palabra32",
			"palabra33","palabra34","palabra35","palabra36","palabra37","palabra38","palabra39","palabra40",
			"palabra41","palabra42","palabra43","palabra44","palabra45","palabra46","palabra47","palabra48",
			"palabra49","palabra50"};
	String[] palabrasNuevas = new String[30];
 
	int total = palabras.length;
	int indice = 0;
 
	while(indicePalabras.size() != 30){
		int numero = random.nextInt(total);
		indicePalabras.add(numero);
	}
 
	for (Integer i : indicePalabras){
		palabrasNuevas[indice] = palabras[i];
		System.out.println(palabrasNuevas[indice]);
		indice++;
	}
}

Tienes un arreglo con una cantidad N de palabras, prácticamente si queremos ver un valor en especifico de nuestro arreglo entonces tenemos que acceder a la posición de ese valor; es decir, arreglo[0], con este conocimiento básico podemos comprender que un arreglo de palabras donde estas no están repetidas es prácticamente números aleatorios que no se repitieron.

Por lo tanto, esta es mi lógica... Un HashSet, es un arreglo con capacidad de métodos; es decir, una lista, una de sus principales características es que no nos permite agregar repetidos por lo tanto es perfecto para nuestro caso. El while nos dice que mientras el tamaño de esta lista no sea igual a 30 entonces se genere un numero aleatorio entero a partir del tamaño de nuestro arreglo de palabras; esto es para evitar que genere números que sobrepasen al tamaño de nuestra lista, y ese numero generado se valla agregando a nuestra lista. Finalmente, recorremos nuestra lista con los indices generados y el valor del arreglo original correspondiente a nuestro indice obtenido lo agregamos a nuevo arreglo, obviamente necesitamos un contador para ir incrementando las posiciones de nuestro nuevo arreglo y no se sobrescriban los valores.

Espero sea lo que necesitas, sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 02/11/2015 15:45:31
Perfecto!! esto es lo que quería!
pero tengo una duda al hacer funciones ahora no se por que el programa no me arranca! Puedes mirar que hay mal?

Y si puedo pedir que me lo expliques como antes de lo agradezo mucho!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
package obtenirparaulesalatazar;
 
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Random;
 
 
public class ObtenirParaulesAlAtazar {
 
      public static void main(String[] args) {
      ObtenirParaulesAlAtazar programa = new ObtenirParaulesAlAtazar();
      programa.Diccionari();
    }
 
      void diccionari(){
          Diccionari();
          int Totalparaules = Total();
          String[] diccionari = Diccionari();
          RandomParaules( diccionari ,  Totalparaules);
          String palabrasNuevas = RandomParaules(diccionari , Totalparaules);
          prova (palabrasNuevas);
      }
 
      public String[] Diccionari(){
 
        System.out.println("Programa que torna paraules al atzar  ")   ;
 String[] diccionari = {
            "a","abadessa","abandonat","abarnegat","abat","abatussat","abissal","abnegat",
            "abrainat","abruptesa","abscissa","absolut","abstreure","acabar","acampar",
            "accent","acer","acerat","acid","aclamar","aclarir","aclarit","acrata",
            "acrobacia","adagi","adaptar","adeptes","adequar","adequat","adeu","adherir",
            "admetre","adonar","adormir","adscriure","adust","advers","advocat","afanar",
            "afany","afavorir","afavorit","afebleix","afeblit","afectat","afectiu","afectuos",
            "afegir","afer","afilar","afinar","afi","afligir","afligit","aflorar","afluent",
            "afluixar","agafar","agalla","agata","agencia","agrair","agrait","agrari","agre",
            "agregar","agror","aguila","ah","ahir","aigua","aiguat","aire","aixada","aixafar",
            "aixecar","aixeta","aixella","aixi","aixo","aixovar","ajeure","ajornar",
            "ajudar","ajupir","ajustar","ala","albada","albi","ale","alenar",
            "alevi","alga","algid","algu","alie","alla","alli","allo","alma","alpi",
            "altivesa","amagar","amanida","amanir","ambre","amorf","ample","ampliar",
            "anar","anca","angoixa","anis","ansa","apagar","apagat","apercebre",
            "apostata","arbre","aristòcrata","atreure","audiofon","autocrata",
            "baixa","bali","bandol","barata","barbar","barrera","bassal","bata",
            "benveure","benviure","bestraure","bobila","bossarrera","bravata","bufor",
            "cabre","caixa","calabre","calibre","canelobre","cantata","carabassal","carrera",
            "casal","caure","causa","celebre","censal","centaure","cercavila","circumscriure",
            "clamar","clar","cloure","codol","colossal","columnata","comensal","commoure",
            "complaure","concloure","condol","contramarc","contrapès","contreure",
            "convilatà","conviure","corbata","correra","coure","creure","cuixa","culata",
            "data","decaure","de","decebre","deixa","descloure","descriure","desfilar",
            "deslliurat","desviure","detreure","deure","distreure","egagropila","embeure",
            "emfasi","empes","entreploure","entreveure","errata","es","escandol","escarlata",
            "escata","escaure","espes","excloure","extasi","extreure","fe","febre","fetge",
            "fila","fluixa","fragata","frenopata","funebre","gaiata","gebre","glabre",
            "gramofon","heretgia","hipotesi","homofon","horabaixa","i","idol","incloure",
            "inscriure","jeure","licorera","lleure","llibre","lliure","lugubre","magnetofon",
            "malveure","manobre","marbre","membre","microfon","minotaure","moure","nombre",
            "o","olla","onda","onada","or","orca","orfebre","pagar","pagat","paper","paraula",
            "pebre","piga","plaure","plorar","ploure","pobre","postdata","prescriure","preveure",
            "promoure","prorrompre","proscriure","public","pulcre","pupitre","que","queixa","readmetre",
            "recloure","regata","reixa","remoure","retreure","rivetaire","romandre","sabata","sabre",
            "safata","salubre","serenata","sobreviure","sostreure","subscriure","tabac","tabal","tacar",
            "tacat","tacit","tacte","tactica","tactil","talar","tall","talla","tallar","talos",
            "talp","tambe","tampo","tanca","tanc","tapar","tapat","tapia","tarda","tasca",
            "tassa","taula","tauro","taxa","tebia","tecla","telefon","timbre","vaca","vacu",
            "vaga","vago","vall","vampir","vandal","vanova","vapor","vaquer","variar",
            "variat","vector","vedell","vegada","vei","veinal","veinat","vel","velada",
            "veler","vell","vena","vencer","vençut","venda","vendre","venial","venjar",
            "venjat","venosa","vent","ventar","ventre","verb","verd","veri","vers","veto",
            "veu","viure","vorera"
        };
          return diccionari;
             }
 
         public int Total(){
 
             int Totalparaules=30;
          return Totalparaules;
 
         }
 
 public String RandomParaules(String[] diccionari , int Totalparaules){
	Random random = new Random();
	String[] palabrasNuevas = new String[30];
	int total = diccionari.length;
	int indice = 0;
        HashSet<Integer> indicePalabras = new LinkedHashSet<Integer>();
 
	while(indicePalabras.size() != Totalparaules){
		int numero = random.nextInt(total);
		indicePalabras.add(numero);
	}
	for (Integer i : indicePalabras){
		palabrasNuevas[indice] = diccionari[i];
		System.out.println(palabrasNuevas[indice]);
		indice++;
	}
          return palabrasNuevas[indice];
 
 
 } public void prova(String palabrasNuevas){
 
        System.out.println() ;
        System.out.println("---------------------------------------------------");
        System.out.println("Resultat es: "+ palabrasNuevas);
        System.out.println("---------------------------------------------------");
        System.out.println();
 
 
         }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 02/11/2015 18:06:44
Hola...

Estás llamando al método Diccionari(), cuando deberías llamar al método diccionari() que es el que contiene toda la lógica de tu aplicación, con el método que estas llamando únicamente te esta devolviendo el arreglo de palabras, por lo tanto es correcto que no funcione como tu quieres ^^!!.

Sin más que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 02/11/2015 18:58:00
ahora si pongo código final!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package obtenirparaulesalatazar;
 
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Random;
 
 
public class ObtenirParaulesAlAtazar {
 
      public static void main(String[] args) {
      ObtenirParaulesAlAtazar programa = new ObtenirParaulesAlAtazar();
      programa.Diccionari();
    }
 
      void Diccionari(){
 
          int Totalparaules = Total();
          String[] diccionari = DiccionariFinal();
        //  RandomParaules( diccionari ,  Totalparaules);
          String[] palabrasNuevas = RandomParaules(diccionari , Totalparaules);
          prova (palabrasNuevas);
      }
 
      public String[] DiccionariFinal(){
 
        System.out.println("Programa que torna paraules al atzar  ")   ;
 String[] diccionari = {
            "a","abadessa","abandonat","abarnegat","abat","abatussat","abissal","abnegat",
            "abrainat","abruptesa","abscissa","absolut","abstreure","acabar","acampar",
            "accent","acer","acerat","acid","aclamar","aclarir","aclarit","acrata",
            "acrobacia","adagi","adaptar","adeptes","adequar","adequat","adeu","adherir",
            "admetre","adonar","adormir","adscriure","adust","advers","advocat","afanar",
            "afany","afavorir","afavorit","afebleix","afeblit","afectat","afectiu","afectuos",
            "afegir","afer","afilar","afinar","afi","afligir","afligit","aflorar","afluent",
            "afluixar","agafar","agalla","agata","agencia","agrair","agrait","agrari","agre",
            "agregar","agror","aguila","ah","ahir","aigua","aiguat","aire","aixada","aixafar",
            "aixecar","aixeta","aixella","aixi","aixo","aixovar","ajeure","ajornar",
            "ajudar","ajupir","ajustar","ala","albada","albi","ale","alenar",
            "alevi","alga","algid","algu","alie","alla","alli","allo","alma","alpi",
            "altivesa","amagar","amanida","amanir","ambre","amorf","ample","ampliar",
            "anar","anca","angoixa","anis","ansa","apagar","apagat","apercebre",
            "apostata","arbre","aristòcrata","atreure","audiofon","autocrata",
            "baixa","bali","bandol","barata","barbar","barrera","bassal","bata",
            "benveure","benviure","bestraure","bobila","bossarrera","bravata","bufor",
            "cabre","caixa","calabre","calibre","canelobre","cantata","carabassal","carrera",
            "casal","caure","causa","celebre","censal","centaure","cercavila","circumscriure",
            "clamar","clar","cloure","codol","colossal","columnata","comensal","commoure",
            "complaure","concloure","condol","contramarc","contrapès","contreure",
            "convilatà","conviure","corbata","correra","coure","creure","cuixa","culata",
            "data","decaure","de","decebre","deixa","descloure","descriure","desfilar",
            "deslliurat","desviure","detreure","deure","distreure","egagropila","embeure",
            "emfasi","empes","entreploure","entreveure","errata","es","escandol","escarlata",
            "escata","escaure","espes","excloure","extasi","extreure","fe","febre","fetge",
            "fila","fluixa","fragata","frenopata","funebre","gaiata","gebre","glabre",
            "gramofon","heretgia","hipotesi","homofon","horabaixa","i","idol","incloure",
            "inscriure","jeure","licorera","lleure","llibre","lliure","lugubre","magnetofon",
            "malveure","manobre","marbre","membre","microfon","minotaure","moure","nombre",
            "o","olla","onda","onada","or","orca","orfebre","pagar","pagat","paper","paraula",
            "pebre","piga","plaure","plorar","ploure","pobre","postdata","prescriure","preveure",
            "promoure","prorrompre","proscriure","public","pulcre","pupitre","que","queixa","readmetre",
            "recloure","regata","reixa","remoure","retreure","rivetaire","romandre","sabata","sabre",
            "safata","salubre","serenata","sobreviure","sostreure","subscriure","tabac","tabal","tacar",
            "tacat","tacit","tacte","tactica","tactil","talar","tall","talla","tallar","talos",
            "talp","tambe","tampo","tanca","tanc","tapar","tapat","tapia","tarda","tasca",
            "tassa","taula","tauro","taxa","tebia","tecla","telefon","timbre","vaca","vacu",
            "vaga","vago","vall","vampir","vandal","vanova","vapor","vaquer","variar",
            "variat","vector","vedell","vegada","vei","veinal","veinat","vel","velada",
            "veler","vell","vena","vencer","vençut","venda","vendre","venial","venjar",
            "venjat","venosa","vent","ventar","ventre","verb","verd","veri","vers","veto",
            "veu","viure","vorera"
        };
          return diccionari;
             }
 
         public int Total(){
 
             int Totalparaules=30;
          return Totalparaules;
 
         }
 
 public String[] RandomParaules(String[] diccionari , int Totalparaules){
	Random random = new Random();
	String[] palabrasNuevas = new String[30];
	int total = diccionari.length;
	int indice = 0;
        HashSet<Integer> indicePalabras = new LinkedHashSet<Integer>();
 
	while(indicePalabras.size() != Totalparaules){
		int numero = random.nextInt(total);
		indicePalabras.add(numero);
	}
	for (Integer i : indicePalabras){
		palabrasNuevas[indice] = diccionari[i];
	//System.out.println(palabrasNuevas[indice]);
		indice++;
	}
          return palabrasNuevas;
 
 
} public void prova(String [] palabrasNuevas){
 
        System.out.println() ;
        System.out.println("---------------------------------------------------");
        System.out.println("Resultat es: ");
         System.out.println(Arrays.toString(palabrasNuevas));
        System.out.println("---------------------------------------------------");
        System.out.println();
 
 
         }
 
}

Veis alguna cosa que haríais diferente??

Para que se me muestre solo lo de la prueba he ocultado una linea con: // Es mejor directamente no ponerla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 02/11/2015 20:24:24
Hola...

Así como lo tienes me parece perfecto ^^. Creo que yo no usaría métodos para el total o para tu diccionario de palabras y pondría el método que manda a llamar todo en el constructor de la clase para que cuando se llame la instancia de la clase, se inicie el proceso, pero si así es tu requerimiento entonces no hay nada que cambiar, además de que por convención el nombre de los métodos van en minúsculas. Si gustas puedes agregarme al Skype para no tener que estar pendiente de la respuesta en el tema (Puedes agregarme con mi correo, lo encuentras a lado de mi nombre).

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 02/11/2015 20:35:07
Gracias Lawliet!

No uso skype.. T_T!!


Me exigen usar el modo prueba para ir enseñando de cada función que hace.. T_T

Gracias por tu ayuda!! ^_^
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 03/11/2015 09:06:19
Tengo un problema el programa me busca 30 palabras al azar..

Pues necesito que no sean 30 palabras sino 30 caracteres.

Es decir que el total de caracteres sea 30 de todas las palabras que hay.

Es decir guardar un array de tamaño 30 caracteres que este formado por las palabras del diccionario.

Por poner un ejemplo :

Hola ( 4 ) , que ( 3 ), tal (3), soy (3), Montse (6), y (1 ) Hacen un total de 30 caracteres.

Como lo hago?

gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 03/11/2015 12:39:04
Tengo un problema el programa me busca 30 palabras al azar..

Pues necesito que no sean 30 palabras sino 30 caracteres.

Es decir que el total de caracteres sea 30 de todas las palabras que hay.

Es decir guardar un array de tamaño 30 caracteres que este formado por las palabras del diccionario.

Por poner un ejemplo :

Hola ( 4 ) , que ( 3 ), tal (3), soy (3), Montse (6), y (1 ) Hacen un total de 30 caracteres.

Como lo hago?

gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 03/11/2015 19:31:52
Hola...

El programa realiza lo que comentaste al principio de este tema, por lo que yo no consideraría como problema del programa, más bien viene siendo problema en no saber expresar lo que necesitas, aunque supongo que son N cantidad de ejercicios por lo que podríamos decir que el ejercicio con respecto a las 30 palabras, queda resuelto.

Ahora, pasando al nuevo ejercicio, que pasa si tienes lo siguiente...

Hola(4), que(3), tal(3), soy(3), alberto(7), y(1), tu(2), como(4), te(2), llamas(6)

Podemos hacer un total de las palabras y nos da como resultado 35, por lo que obviamente se paso del limite de caracteres; es decir, 30, sin contar la palabra "llamas" tenemos un total de 29 caracteres por lo que para completar tu limite es necesario agregar la primera letra de la siguiente palabra.... Mi pregunta es... ¿Eso es valido o tiene que buscar las palabras dentro del arreglo para obtener un resultado exacto?

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 03/11/2015 19:41:28
he echo algo más o menos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package obtenirparaulesatzar;
 
import java.util.Arrays;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Random;
 
public class ObtenirParaulesAtzar {
 
    public static void main(String[] args) {
        ObtenirParaulesAtzar  programa = new ObtenirParaulesAtzar ();
        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","abadessa","abandonat","abarnegat","abat","abatussat","abissal","abnegat",
            "abrainat","abruptesa","abscissa","absolut","abstreure","acabar","acampar",
            "accent","acer","acerat","acid","aclamar","aclarir","aclarit","acrata",
            "acrobacia","adagi","adaptar","adeptes","adequar","adequat","adeu","adherir",
            "admetre","adonar","adormir","adscriure","adust","advers","advocat","afanar",
            "afany","afavorir","afavorit","afebleix","afeblit","afectat","afectiu","afectuos",
            "afegir","afer","afilar","afinar","afi","afligir","afligit","aflorar","afluent",
            "afluixar","agafar","agalla","agata","agencia","agrair","agrait","agrari","agre",
            "agregar","agror","aguila","ah","ahir","aigua","aiguat","aire","aixada","aixafar",
            "aixecar","aixeta","aixella","aixi","aixo","aixovar","ajeure","ajornar",
            "ajudar","ajupir","ajustar","ala","albada","albi","ale","alenar",
            "alevi","alga","algid","algu","alie","alla","alli","allo","alma","alpi",
            "altivesa","amagar","amanida","amanir","ambre","amorf","ample","ampliar",
            "anar","anca","angoixa","anis","ansa","apagar","apagat","apercebre",
            "apostata","arbre","aristòcrata","atreure","audiofon","autocrata",
            "baixa","bali","bandol","barata","barbar","barrera","bassal","bata",
            "benveure","benviure","bestraure","bobila","bossarrera","bravata","bufor",
            "cabre","caixa","calabre","calibre","canelobre","cantata","carabassal","carrera",
            "casal","caure","causa","celebre","censal","centaure","cercavila","circumscriure",
            "clamar","clar","cloure","codol","colossal","columnata","comensal","commoure",
            "complaure","concloure","condol","contramarc","contrapès","contreure",
            "convilatà","conviure","corbata","correra","coure","creure","cuixa","culata",
            "data","decaure","de","decebre","deixa","descloure","descriure","desfilar",
            "deslliurat","desviure","detreure","deure","distreure","egagropila","embeure",
            "emfasi","empes","entreploure","entreveure","errata","es","escandol","escarlata",
            "escata","escaure","espes","excloure","extasi","extreure","fe","febre","fetge",
            "fila","fluixa","fragata","frenopata","funebre","gaiata","gebre","glabre",
            "gramofon","heretgia","hipotesi","homofon","horabaixa","i","idol","incloure",
            "inscriure","jeure","licorera","lleure","llibre","lliure","lugubre","magnetofon",
            "malveure","manobre","marbre","membre","microfon","minotaure","moure","nombre",
            "o","olla","onda","onada","or","orca","orfebre","pagar","pagat","paper","paraula",
            "pebre","piga","plaure","plorar","ploure","pobre","postdata","prescriure","preveure",
            "promoure","prorrompre","proscriure","public","pulcre","pupitre","que","queixa","readmetre",
            "recloure","regata","reixa","remoure","retreure","rivetaire","romandre","sabata","sabre",
            "safata","salubre","serenata","sobreviure","sostreure","subscriure","tabac","tabal","tacar",
            "tacat","tacit","tacte","tactica","tactil","talar","tall","talla","tallar","talos",
            "talp","tambe","tampo","tanca","tanc","tapar","tapat","tapia","tarda","tasca",
            "tassa","taula","tauro","taxa","tebia","tecla","telefon","timbre","vaca","vacu",
            "vaga","vago","vall","vampir","vandal","vanova","vapor","vaquer","variar",
            "variat","vector","vedell","vegada","vei","veinal","veinat","vel","velada",
            "veler","vell","vena","vencer","vençut","venda","vendre","venial","venjar",
            "venjat","venosa","vent","ventar","ventre","verb","verd","veri","vers","veto",
            "veu","viure","vorera"
            };
        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[10];
        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 <= 40){
 
            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();
    }
}



Pero el problema son los null que me salen y que se puede repetir alguna palabra..

como lo arreglarías?

Las palabras SIEMPRE tienen que salir del diccionario y tener un tamaño de caracteres total a 30! nunca menos de 30 o más de 30.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 03/11/2015 19:50:48
Hola...

Entonces supongo que entre todas tus palabras, tu aplicación debe elegir las palabras correctas para que no se pase de 30 y tampoco sea menor a 30; es decir, busca las palabras con el fin de dar un resultado exacto, ¿Verdad?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 03/11/2015 19:53:02
eso es!

Por eso el problema que tengo es que no se como hacer para que el programa me rellene el array sin ponerle el tamaño de 10 que tiene ahora!

y como hacer para que NUNCA se repita ninguna de las palabras que ya hay anteriormente ya seleccionadas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Lawliet
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Lawliet (303 intervenciones) el 03/11/2015 20:13:24
Hola...

Lo que necesitas es un arreglo con todas las palabras que cumplan un tamaño de 30 caracteres, las palabras no se debe repetir y obviamente las obtienes aleatorimente. ¿Es correcto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

String y Random! ( quitar repetidos )

Publicado por montse (36 intervenciones) el 03/11/2015 21:12:52
si eso mismo!!

:(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto
Val: 308
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

String y Random! ( quitar repetidos )

Publicado por Alberto (303 intervenciones) el 05/11/2015 00:37:32
Hola...

Lamento la tardanza, pero el trabajo me tiene un poco ocupado. Lo hiciste de esta manera, no estoy seguro si es lo que necesitas pero por lo menos para mi es funcional...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public class ArregloCaracteres {
	public static void main(String[] args) {
		String[] diccionario = {"a","abadessa","abandonat","abarnegat","abat","abatussat","abissal","abnegat",
	            "abrainat","abruptesa","abscissa","absolut","abstreure","acabar","acampar",
	            "accent","acer","acerat","acid","aclamar","aclarir","aclarit","acrata",
	            "acrobacia","adagi","adaptar","adeptes","adequar","adequat","adeu","adherir",
	            "admetre","adonar","adormir","adscriure","adust","advers","advocat","afanar",
	            "afany","afavorir","afavorit","afebleix","afeblit","afectat","afectiu","afectuos",
	            "afegir","afer","afilar","afinar","afi","afligir","afligit","aflorar","afluent",
	            "afluixar","agafar","agalla","agata","agencia","agrair","agrait","agrari","agre",
	            "agregar","agror","aguila","ah","ahir","aigua","aiguat","aire","aixada","aixafar",
	            "aixecar","aixeta","aixella","aixi","aixo","aixovar","ajeure","ajornar",
	            "ajudar","ajupir","ajustar","ala","albada","albi","ale","alenar",
	            "alevi","alga","algid","algu","alie","alla","alli","allo","alma","alpi",
	            "altivesa","amagar","amanida","amanir","ambre","amorf","ample","ampliar",
	            "anar","anca","angoixa","anis","ansa","apagar","apagat","apercebre",
	            "apostata","arbre","aristòcrata","atreure","audiofon","autocrata",
	            "baixa","bali","bandol","barata","barbar","barrera","bassal","bata",
	            "benveure","benviure","bestraure","bobila","bossarrera","bravata","bufor",
	            "cabre","caixa","calabre","calibre","canelobre","cantata","carabassal","carrera",
	            "casal","caure","causa","celebre","censal","centaure","cercavila","circumscriure",
	            "clamar","clar","cloure","codol","colossal","columnata","comensal","commoure",
	            "complaure","concloure","condol","contramarc","contrapès","contreure",
	            "convilatà","conviure","corbata","correra","coure","creure","cuixa","culata",
	            "data","decaure","de","decebre","deixa","descloure","descriure","desfilar",
	            "deslliurat","desviure","detreure","deure","distreure","egagropila","embeure",
	            "emfasi","empes","entreploure","entreveure","errata","es","escandol","escarlata",
	            "escata","escaure","espes","excloure","extasi","extreure","fe","febre","fetge",
	            "fila","fluixa","fragata","frenopata","funebre","gaiata","gebre","glabre",
	            "gramofon","heretgia","hipotesi","homofon","horabaixa","i","idol","incloure",
	            "inscriure","jeure","licorera","lleure","llibre","lliure","lugubre","magnetofon",
	            "malveure","manobre","marbre","membre","microfon","minotaure","moure","nombre",
	            "o","olla","onda","onada","or","orca","orfebre","pagar","pagat","paper","paraula",
	            "pebre","piga","plaure","plorar","ploure","pobre","postdata","prescriure","preveure",
	            "promoure","prorrompre","proscriure","public","pulcre","pupitre","que","queixa","readmetre",
	            "recloure","regata","reixa","remoure","retreure","rivetaire","romandre","sabata","sabre",
	            "safata","salubre","serenata","sobreviure","sostreure","subscriure","tabac","tabal","tacar",
	            "tacat","tacit","tacte","tactica","tactil","talar","tall","talla","tallar","talos",
	            "talp","tambe","tampo","tanca","tanc","tapar","tapat","tapia","tarda","tasca",
	            "tassa","taula","tauro","taxa","tebia","tecla","telefon","timbre","vaca","vacu",
	            "vaga","vago","vall","vampir","vandal","vanova","vapor","vaquer","variar",
	            "variat","vector","vedell","vegada","vei","veinal","veinat","vel","velada",
	            "veler","vell","vena","vencer","vençut","venda","vendre","venial","venjar",
	            "venjat","venosa","vent","ventar","ventre","verb","verd","veri","vers","veto",
	            "veu","viure","vorera"
	            };
		List<String> palabrasElegidas = new ArrayList<String>();
		List<Character> caracteresPalabras = new ArrayList<Character>();
		int total = 30;
		int indice = 0;
 
		while(total > 0){
			indice = new Random().nextInt(diccionario.length);
			if(total > diccionario[indice].length()){
				total -= diccionario[indice].length();
				palabrasElegidas.add(diccionario[indice]);
			} else {
				for(int i = 0; i < diccionario.length; i++){
					if (diccionario[i].length() == total){
						palabrasElegidas.add(diccionario[i]);
						total -= diccionario[i].length();
					}
				}
			}
		}
 
		for (String cadena : palabrasElegidas) {
			char[] caracteres = cadena.toCharArray();
			for(int i = 0; i < caracteres.length; i++){
				caracteresPalabras.add(caracteres[i]);
			}
		}
 
		for (int i = 0; i < caracteresPalabras.size(); i++) {
			if (i == caracteresPalabras.size() - 1){
				System.out.print(caracteresPalabras.get(i) + "");
			} else {
				System.out.print(caracteresPalabras.get(i) + ", ");
			}
		}
	}
}

Si ejecutamos la aplicación obtenemos la salida siguiente...

1
a, f, a, v, o, r, i, r, a, g, a, t, a, t, a, m, b, e, a, l, l, i, b, a, i, x, a, a, f, i

Como podrás darte cuenta, tenemos un arreglo con todos los caracteres de las palabras que hacen un total de 30. Lo que hice fue lo siguiente... Tenemos una variable que tiene como valor 30 lo cual indica el limite de nuestro arreglo final, nosotros vamos recuperando una palabra mientras esa variable sea mayor a 0 dentro del while, cuando nosotros recuperamos nuestra palabra validamos que el tamaño de esa palabra sea menor al valor que contiene total, de esa manera ira restando hasta llegar un punto donde total viene siendo mayor tamaño de nuestra palabra generada, además de agregarlo inmediatamente a una lista el cual contiene todas nuestras palabras recuperadas hasta el momento. Cuando llega el momento de salirse del condicional; es decir, entrar al ELSE, es cuando nosotros recorremos todo nuestro arreglo de palabras y obtenemos el tamaño de todas, cuando el tamaño sea igual al valor actual de nuestra variable, entonces agregamos la última palabra a la lista. Finalmente, recorremos nuestras lista con todas las palabras y vamos separando los caracteres para agregar cada uno de ellos a un nuevo arreglo con todos los caracteres.

Sin mas que comentar, cualquier duda y/o inconveniente, aquí estamos.

Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar