Ho scritto il codice riportato di seguito con l'intento di avere le n frequenze più alte o più basse di un qualsiasi file di testo, ma durante la compilazione mi dà l'errore che ho riportato nel titolo della discussione e non so come ovviare al problema, non ci ho mai capito molto tra static, istanze ecc. Vi ringrazio in anticipo
codice:import java.awt.event.*; import java.awt.*; import javax.swing.*; public class FrequenzaFile extends JFrame { private JButton jBNumTop=new JButton("10"); private JButton jBscelta=new JButton("Scelta file"); private JFileChooser File_scelta= new JFileChooser(); private JPanel jPdati= new JPanel(); private JPanel jPmenu= new JPanel(); private JButton jBFreqA=new JButton("N frequenze più alte"); private JButton jBFreqB=new JButton("N frequenze più basse"); String nomeFile=""; public FrequenzaFile (int larg,int altezza) { setSize(larg,altezza); Container contenitore=getContentPane(); contenitore.setLayout(new BorderLayout()); jPmenu.setLayout(new GridLayout(2,3)); jPmenu.add(jBscelta);jBscelta.addActionListener(new EvButton()); jPmenu.add(new Label("Numero caratteri più frequenti:")); jPmenu.add(jBNumTop); jBNumTop.addActionListener(new EvButton2()); jPmenu.add(new Label("Quali frequeze desideri?")); jPmenu.add(jBFreqA); jPmenu.add(jBFreqB); contenitore.add(jPmenu,"North"); contenitore.add(jPdati,"Center"); } public static void main(String arg[]) { FrequenzaFile F_uno=new FrequenzaFile(600,600); F_uno.addWindowListener(new ev_Finestra()); // F_uno.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); F_uno.setLocation(200,0); F_uno.setVisible(true); } public void paintComponent(Graphics g) { paintComponents(g); paintAll(g);} private void visualizza( FrequenzaByte topChar[], int numTotale) { String [] titCol={"codice","car","freq.ass.","freq.rel."}; jPdati.removeAll(); jPdati.setLayout(new GridLayout(topChar.length+1, titCol.length)); for(int i=0; i<titCol.length; i++){ jPdati.add(new JButton(titCol[i])); } for(int i=0;i<topChar.length;i++){ jPdati.add(new JButton(""+(int)topChar[i].carattere)); jPdati.add(new JButton(""+topChar[i].carattere)); jPdati.add(new JButton(""+topChar[i].frequenza)); jPdati.add(new JButton(""+topChar[i].frequenza*100/numTotale+"%")); } setVisible(true); } private void aggiorna() { int n=(Integer.parseInt(jBNumTop.getText())+1)%16+5; jBNumTop.setText(""+n); if(nomeFile.length()==0) selezionaFile(); else statisticheFile(nomeFile); } private void selezionaFile() { try{if (File_scelta.showOpenDialog(null)==JFileChooser.APPROVE_OPTION) {nomeFile=File_scelta.getSelectedFile().getPath(); statisticheFile(nomeFile); } } catch(Exception ex) {System.out.println(ex.getMessage());} } private void statisticheFile(String nomefile){ Frequenze freq=new Frequenze(); freq.frequenzedaFile(nomeFile); int numTop=Integer.parseInt(jBNumTop.getText()); int totale=freq.conta(); visualizza(freq.topFrequenze(numTop),totale); } private void selezionaFrequenza() { String freq=JOptionPane.showInputDialog(null,"Di quanti caratteri si desidera la frequeza?","10"); jBNumTop.setText(freq); } class EvButton2 implements ActionListener { public void actionPerformed(java.awt.event.ActionEvent evt) { selezionaFrequenza(); } } class EvButton implements ActionListener { public void actionPerformed(java.awt.event.ActionEvent evt) { selezionaFile(); } } class ev_Finestra extends WindowAdapter { private void windowClosing(WindowEvent event) {JOptionPane p1=new JOptionPane(); int x=p1.showConfirmDialog(null,"Conferma per terminare","ATTENZIONE",2); if(x==JOptionPane.YES_OPTION)System.exit(0); } } }
Questa è u altra classe contenuta nella stessa cartelle, non so se può essere d'aiuto:
codice:import java.io.*; public class FrequenzaByte { char carattere; int frequenza; public FrequenzaByte(char c, int fr) { carattere=c; frequenza=fr; } } class Frequenze { int[] frequenze= new int[256]; public Frequenze() { for(int i=0; i<frequenze.length;i++) frequenze[i]=0; } private int indMaxVettore( int [] v) { int indMax=0; for(int i=0;i<v.length;i++) if(v[indMax]<v[i]) indMax=i; return indMax; } public int conta() { int s=0; for(int i=0;i<frequenze.length;i++) s+=frequenze[i]; return s; } public void frequenzedaFile(String nomeFile) { frequenze=new int[256]; for(int i=0;i<frequenze.length;i++) frequenze[i]=0; RandomAccessFile f; try{f=new RandomAccessFile(nomeFile, "rw"); int byteLetto; try{ while((byteLetto=f.readByte())!=-1) frequenze[byteLetto]++; } finally {f.close();} } catch(Exception ex) {System.out.println(ex.getMessage());} } public FrequenzaByte[] topFrequenze(int numTop) { FrequenzaByte[] topByte= new FrequenzaByte[numTop]; int indMax=0; for(int i=0;i<topByte.length;i++){ topByte[i]=new FrequenzaByte((char)indMax,frequenze[indMax]); frequenze[indMax]=0; } return topByte; } }

Rispondi quotando