2012-07-18 40 views
0

我试图通过一组与迭代器进行搜索,但是当我做,只发现两个整组!这里是我的代码:迭代器不能完成所有的设置

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 entrada\n"); 
     } 
    }; 
    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 任何想法我做错了什么?

+7

当然可以将该降低到[SSCCE](http://sscce.org)。 – 2012-07-18 16:21:31

+0

您如何确定该集合不仅包含两个元素? – 2012-07-18 16:23:27

+0

我把额外的一行来验证它包含了多少元素,每次运行程序时的输出都是85930。 – hinafu 2012-07-18 16:38:57

回答

2

线

if(min==0) return resp; 

...在循环将提前退出循环,迭代器已经环绕在集合中的所有元素之前。所以,如果edit_distance曾经返回0,将停止循环(跳出了函数,返回resp)。