0

イテレータを使用してセットを検索しようとしていますが、検索すると、セット全体のうち 2 つしか見つかりません! コードは次のとおりです。

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

4

1 に答える 1

2

この線

if(min==0) return resp;

... in the loop は、反復子がセット内のすべての要素をループする前に、ループを早期に終了します。したがって、edit_distanceが返さ0れると、ループが停止します (関数から飛び出して、 が返されますresp)。

于 2012-07-18T16:23:06.657 に答える