迭代器不是全部集合



我试图用迭代器搜索一个集合,但当我这样做时,它只找到整个集合中的两个!,这是我的代码:

import java.net.URL;
import com.google.gson.Gson;
import java.net.URLEncoder;
import java.io.InputStreamReader;
import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
public class Main {
  public static int min(int a,int b) {
    return a > b? b : a;
  }
  public static String corregir(String a,Set<String> col) {
      System.out.print("EL TAMAÑO ES: " + col.size());
      Iterator<String> it = col.iterator();
      String resp = a,aux = resp;
      int min = 30,dis,cont = 0;
      while(it.hasNext()) {
          cont++;
          resp = it.next().toString();
          System.out.print("El contador va en "  + cont + "n");
          dis = edit_distance(a,resp);
          if(dis<min) {
              aux = resp; min = dis;
          }
          if(min==0) return resp;
      }
      return aux;
  }
  public static int edit_distance(String a,String b) {
    int n = a.length(), m = b.length(),costo;
    int[][] mat = new int[n+1][m+1];
    for(int i=0;i<=n;++i) mat[i][0] = i;
    for(int j=0;j<=m;++j) mat[0][j] = j;
    for(int i=1;i<=n;++i) {
      for(int j=1;j<=m;++j) {
        costo = a.charAt(i-1) == b.charAt(j-1)? 1 : 0;
        mat[i][j] = min(min(mat[i-1][j] + 1,mat[i-1][j-1] + costo),mat[i][j-1] + 1);
      }
    }
    return mat[n][m];
  }
  public static String resultados_de_la_busqueda(String search) {
    StringBuffer RES = new StringBuffer("<html>");
    String google = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q="; //El enlace para buscar en google
    String charset = "UTF-8";
    URL url;
    Reader reader;
    try {
      url = new URL(google + URLEncoder.encode(search, charset));
      try {
        reader = new InputStreamReader(url.openStream(), charset);
        GoogleResults results = new Gson().fromJson(reader, GoogleResults.class);
        for(int i=0;i<3;++i) {
          RES.append(results.getResponseData().getResults().get(i).getTitle());
          RES.append("<br/>");
          RES.append("<a href="");
          RES.append(results.getResponseData().getResults().get(i).getUrl());
          RES.append("">" + results.getResponseData().getResults().get(i).getUrl() + "</a>");
          RES.append("<br/><br/>");
        }
      } catch(Exception e) {}
    } catch(Exception e) {}
    RES.append("</html>");
    return RES.toString();
  }
  public static void main(String[] args) throws Exception {
    Set<String> col = new HashSet<String>();
    FileInputStream fis = new FileInputStream("lemario.txt");
    Scanner cin = new Scanner(fis);
    while(cin.hasNext()) {
        col.add(cin.next());
    }
    cin.close();
    final Set<String> col2 = col;
    /*
    Iterator<String> it = col2.iterator();
    while(it.hasNext()) {
        System.out.print(it.next() + "n");
    }*/
    //Corrector
    System.out.print(col.size());
    //Map<String,>
    JFrame jf = new JFrame("Programa");
    jf.setBounds(120,120,500,500);
    jf.setResizable(false);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    final JTextField input = new JTextField();
    input.setBounds(25,25,300,25);
    final JLabel resultados = new JLabel();
    resultados.setBounds(120,120,200,200);
    JButton boton = new JButton("Buscar");
    ActionListener al = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if(! input.getText().equals("")) {
            String entrada = input.getText();
            entrada = corregir(entrada,col2);
            resultados.setText(resultados_de_la_busqueda(entrada));
        }
        else System.out.println("No hay entradan");
      }
    };
    boton.addActionListener(al);
    input.addActionListener(al);
    boton.setBounds(350,25,130,25);
    jf.add(boton);
    jf.add(input);
    jf.add(resultados);

    //resultados.setText(resultados_de_la_busqueda("taringa")); //setText(input.getText()); asumiendo que está bien escrito.
    //Para verificar si está bien escrito tenemos que pasarlo por el diccionario y verificar palabra por palabra
    //Bastante lento, pero qué se va a hacer :'D
    jf.add(input);
    jf.add(resultados);
    jf.setVisible(true);
  }
}

我正在阅读的文件是:http://www.teoruiz.com/lemario/lemario-20101017.txt你知道我做错了什么吗?

if(min==0) return resp;

在迭代器遍历集合中的所有元素之前,循环中将提前终止循环。因此,如果edit_distance返回0,它将停止循环(并跳出函数,返回resp)。

最新更新