Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Java] wyszukiwanie binarne za pomocą klasy Collections

giermo 30 Lis 2010 00:42 1257 1
  • #1 30 Lis 2010 00:42
    giermo
    Poziom 1  

    Witam. Mam za zadanie zaimplementować w programie z danymi osób wyszukiwarkę, która będzie korzystała z wyszukiwania binarnego za pomocą metod klasy usługowej Collections. Próbowałem różnych sposobów, ale ciągle napotykam różne błędy. Jeśli ktoś mógłby pomóc w dodaniu takiej wyszukiwarki, byłbym bardzo wdzięczny.
    Kod mojego programu:

    Code:
    package DaneOsob;
    
    import java.awt.*;
    import java.lang.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;
    import java.awt.event.*;
    import javax.swing.table.*;




    class Panel extends JPanel implements ListSelectionListener
    { JTable tabela;
      DefaultTableModel model;
      ArrayList <Dane1> dane;
      int wiersz;
      static ArrayList <Dane1> arraylist= new ArrayList<Dane1>();



     public Panel(ArrayList <Dane1> v)
     {super();
      dane=v;
      final String[] columnNames = {"Nazwisko","Uwagi","Srednia"};
      model=new DefaultTableModel(columnNames,0);
      tabela= new JTable(model);
      model.addRow(new Vector<String>(3));
      tabela.setPreferredScrollableViewportSize(new Dimension(250,150));
      tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION );
      ListSelectionModel selekcja = tabela.getSelectionModel();
      selekcja.addListSelectionListener(this);
      JScrollPane suwak = new JScrollPane(tabela);
      add(suwak);
      }

      public void valueChanged(ListSelectionEvent e)
       {
        if (e.getValueIsAdjusting()) return;
        ListSelectionModel lsm = (ListSelectionModel)e.getSource();
        if (!lsm.isSelectionEmpty())
          {wiersz = lsm.getMinSelectionIndex();
           System.out.println("Wiersz " + wiersz+ " jest wybrany.");
          }
        }

      public void wyswietl()
      {
          Iterator iterator = dane.iterator();
        model.setRowCount(0);
          int i=0;
        while(iterator.hasNext())
           { Dane1 t=(Dane1)iterator.next();
             Vector <String>vv=new Vector<String>(3);
             model.addRow(vv);




             model.setValueAt(t.Podaj_nazwisko(),i,0);
             model.setValueAt(t.Podaj_uwagi(),i,1);
             model.setValueAt(""+t.Podaj_srednia(),i,2);
             i++;
           }
         Vector <String>vv=new Vector<String>(3);
         model.addRow(vv);
      }

      public void obslugaactionPerformed()
       {if(tabela.isRowSelected(wiersz))
          {String nazwisko=(String)model.getValueAt(wiersz, 0);
           String uwagi=(String)model.getValueAt(wiersz, 1);
           String srednia=(String)model.getValueAt(wiersz, 2);
           if(nazwisko!=null&&uwagi!=null&&srednia!=null&&
            !nazwisko.equals("")&& !uwagi.equals("")
            &&!srednia.equals(""))
              {try
               {Float.parseFloat(srednia);
                Dane1 d=Dane1.Wstaw(nazwisko,uwagi, srednia);
                dane.add(d);
                Collections.sort(dane);
                wyswietl();
               }catch(NumberFormatException e)
                {JOptionPane.showMessageDialog(this,
                    "Wprowadz poprawną średnią");}
              }
           }
       }
     public void szukaj(){
         String s = JOptionPane.showInputDialog(null,"podaj nazwisko");
         
         
     }
     }


    class Okno extends JFrame implements ActionListener
    {
       //składniki interfesju graficznego użytkownika
       Panel  panel;
       JButton osobaOK ;
       JButton repaintOK ;
       JButton Szukaj ;
       JTextField szukaj;


       public Okno(ArrayList <Dane1>dane)
       {super("Dane osób");
        setSize(350,300);
        osobaOK=new JButton("Osoba OK");
        osobaOK.addActionListener(this);
        repaintOK=new JButton("Repaint OK");
        repaintOK.addActionListener(this);
        Szukaj=new JButton("Szukaj");
        Szukaj.addActionListener(this);
        szukaj=new JTextField("Wpisz nazwisko");
        szukaj.addActionListener(this);
        setDefaultLookAndFeelDecorated(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        panel = new Panel(dane);
        panel.setOpaque(true);
        panel.add(osobaOK);
        panel.add(repaintOK);
        panel.add(Szukaj);
        panel.add(szukaj);
        setContentPane(panel);
        setVisible(true);
      }



       public void actionPerformed(ActionEvent evt)
        { Object zrodlo=evt.getSource();
          if (zrodlo==osobaOK)
             panel.obslugaactionPerformed();
          else
          if (zrodlo==Szukaj)
             panel.szukaj();
          else
          if (zrodlo==repaintOK)
             panel.wyswietl();
              //wywołanie funkcji odświeżającej zawartość tabeli
          repaint(); //i pokazanie jej na ekranie
         }
    }
     public class DaneOsob
      {    static ArrayList<Dane1> dane=new ArrayList<Dane1>(5);

     
       

         static  public void main(String arg[])
            {  DaneOsob baza = new  DaneOsob();
               Okno okno = new Okno(baza.dane);
               ArrayList <Dane1> arraylist= new ArrayList<Dane1>();
               Collections.sort(arraylist);
               

            }
    }


     class Dane1 implements Comparable <Dane1>
     { String nazwisko;
       float srednia;
       String uwagi;


       public  void Nadaj_nazwisko(String lan)
        { nazwisko=lan;}
       public String Podaj_nazwisko()
        { return nazwisko;}
       public  void Nadaj_uwagi(String lan)
        { uwagi=lan;}
       public String Podaj_uwagi()
         { return uwagi;}
       public  void Nadaj_srednia(float srednia_)
        { srednia=srednia_;}
      public float Podaj_srednia()
         {return srednia;}

      public static Dane1 Wstaw(String nazwisko_, String uwagi_, String srednia_)
          { Dane1 d=new Dane1();
            d.Nadaj_nazwisko(nazwisko_);
            d.Nadaj_srednia(Float.parseFloat(srednia_));
            d.Nadaj_uwagi(uwagi_);
            return d;
          }

    public String toString()
       {String napis="";
        napis+=" Nazwisko: "+nazwisko;
        napis+=" Srednia: "+srednia;
        napis+=" Uwagi: "+uwagi+"\n";
        return napis;
       }

      public boolean equals(Object o)
       { Dane1 d=(Dane1)o;
         return  nazwisko.equals(d.nazwisko)
                 && srednia==d.srednia
                 && uwagi.equals(d.uwagi);
       }

      public int hashCode() 
       {return nazwisko.hashCode()+(int)srednia+uwagi.hashCode();
        }
      public int compareTo(Dane1 o) /
       { return nazwisko.compareTo(o.nazwisko);
       }
     }

    0 1
  • #2 05 Gru 2010 15:27
    one_eddie
    Poziom 25  

    A jakie dokładnie problemy napotkałeś? Opisz jeden z nich to może znajdzie się osoba, która będzie Ci w stanie podpowiedziec.

    0