Error al enviar una lista de String como parametro
Buenas, disculpen por el mal uso del foro o por mi mala forma de hacer las cosas, pero es la primera vez que uso un foro.
Tengo un problema con un programa que estoy haciendo en cual consiste en la búsqueda de la raíz de las palabras de una frase...
Esta es la parte principal del código:
static List<Nodo> diccionarioLista = new ArrayList<>();
static List<Nodo> busqueda = new ArrayList<>();
static List<String> urlssinRepetir = new ArrayList<>();
static List<Nodo2> presentacion = new ArrayList<>();
static List<String> bases = new ArrayList<>();
static List<Integer> repeticiones = new ArrayList<>();
public static void main(String[] args) {
cargatxtDiccionario();
String fraseBuscada="verde blanco azul";
busqueda(fraseBuscada);
System.out.println("***************************************************");
limpieza();
System.out.println("***************************************************");
presentacion();
System.out.println("***************************************************");
impresion();
}
public static void cargatxtDiccionario(){
try {
FileInputStream fstream = new FileInputStream("diccionario.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
String partesNodo[];
while ((strLine = br.readLine()) != null){
if(strLine.charAt(0)!='$'){
partesNodo=strLine.split(" ");
if(partesNodo.length==3){
diccionarioLista.add(new Nodo(partesNodo[0], partesNodo[1], Integer.parseInt(partesNodo[2])));
}
partesNodo=null;
}
}
fstream.close();
br.close();
System.out.println("Diccionario cargado n.n");
} catch (Exception e) {
System.out.println(e);
}
}
public static String devolverRaiz(String palabra){
String aux=palabra;
Stemm_es a = new Stemm_es();
aux=a.stemm(aux);
return aux;
}
public static void busqueda(String frase){
String [] palabrasBase = frase.split(" ");
for(int x=0;x<palabrasBase.length;x++){
palabrasBase[x]=devolverRaiz(palabrasBase[x]);
}
for(int x=0;x<palabrasBase.length;x++){
int coincidencias=0;
for(int y=0;y<diccionarioLista.size();y++){
if(diccionarioLista.get(y).getPalabra().equals(palabrasBase[x])){
busqueda.add(diccionarioLista.get(y));
coincidencias++;
}
}
System.out.println(coincidencias+" concidencias encontradas para la palabra "+palabrasBase[x]);
}
System.out.println("***************************************************");
for(int x=0;x<busqueda.size();x++){
System.out.println(busqueda.get(x).getUrl());
}
}
public static void limpieza(){
for(int x=0;x<busqueda.size();x++){
urlssinRepetir.add(busqueda.get(x).getUrl());
}
HashSet<String> hashSet = new HashSet<>(urlssinRepetir);
urlssinRepetir.clear();
urlssinRepetir.addAll(hashSet);
for(int x=0;x<urlssinRepetir.size();x++){
System.out.println(urlssinRepetir.get(x));
}
}
//Aquí esta el problema
public static void presentacion(){
for(int x=0;x<urlssinRepetir.size();x++){
bases.clear();
repeticiones.clear();
for(int y=0;y<busqueda.size();y++){
if(urlssinRepetir.get(x).equals(busqueda.get(y).getUrl())){
bases.add(busqueda.get(y).getPalabra());
repeticiones.add(busqueda.get(y).getRepite());
}
}
//System.out.println(x+" bases "+bases.size()+" repe "+repeticiones.size());
for(int t=0;t<bases.size();t++){
System.out.println(bases.get(t)+" "+repeticiones.get(t));
}
System.out.println("-----------------------------");
presentacion.add(new Nodo2(urlssinRepetir.get(x),bases,repeticiones));
}
}
public static void impresion(){
System.out.println(presentacion.size());
List<String> aux = presentacion.get(4).bases;
for(String salida:aux){
System.out.println(salida);
}
}
}
y este mi objeto Nodo2:
String url;
List<String> bases = new ArrayList<String>();
List<Integer> repeticiones = new ArrayList<Integer>();
public Nodo2(String url, List<String> bases, List<Integer> repeticiones) {
this.url = url;
this.bases = bases;
this.repeticiones = repeticiones;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public List<String> getBases() {
return bases;
}
public void setBases(List<String> bases) {
this.bases = bases;
}
public List<Integer> getRepeticiones() {
return repeticiones;
}
public void setRepeticiones(List<Integer> repeticiones) {
this.repeticiones = repeticiones;
}
public String getBaseUnitario(int i){
if(i<getLength()){
return bases.get(i);
}
else{
return "Error";
}
}
public int getLength(){
return bases.size();
}
public void printNodo() {
System.out.println(url);
for(int x=0;x<bases.size();x++){
System.out.print(bases.size()+" "+repeticiones.size());
}
}
}
Antes crear un nuevo Nodo2 la salida es asi:
verd 1
-----------------------------
verd 2
-----------------------------
blanc 1
-----------------------------
verd 1
-----------------------------
verd 1
blanc 5
azul 5
-----------------------------
verd 1
azul 1
-----------------------------
verd 1
blanc 5
azul 5
-----------------------------
blanc 1
-----------------------------
blanc 1
azul 1
-----------------------------
azul 1
-----------------------------
blanc 1
Lo cual es correcto, pero al ingresar la listas de String y de Integer al nodo solo me muestra "blanc 1" en todo.
Si alguien pudiera ser tan amable de que error estoy cometiendo, le estaría muy agradecido.
Y reitero una disculpa si no estructure bien el contenido y estoy abierto a comentarios de como mejorar.
- Inicie sesión o regístrese para enviar comentarios
Respuesta
Bueno, si alguien le sirve, encontré la solución después de un rato
for(int x=0;x<urlssinRepetir.size();x++){
List<String> bases = new ArrayList<>();
List<Integer> repeticiones = new ArrayList<>();
for(int y=0;y<busqueda.size();y++){
if(urlssinRepetir.get(x).equals(busqueda.get(y).getUrl())){
bases.add(busqueda.get(y).getPalabra());
repeticiones.add(busqueda.get(y).getRepite());
}
}
//System.out.println(x+" bases "+bases.size()+" repe "+repeticiones.size());
for(int t=0;t<bases.size();t++){
System.out.println(bases.get(t)+" "+repeticiones.get(t));
}
System.out.println("-----------------------------");
presentacion.add(new Nodo2(urlssinRepetir.get(x),bases,repeticiones));
}
}
Debugear
La mejor técnica para localizar errores lógicos de un programa es debugear. Te aconsejo usarlo siempre, incluso como parte del ciclo de desarrollo de software.