2011-03-04 13 views
0

中傳遞方法我寫了一個類,其中包含一些用於txt checkIsFile的方法,讀取了多少行,放入數組並打印數組,並且它工作正常。無法在主

package myProva; 

import java.io.*; 
import java.util.StringTokenizer; 
import java.util.*; 
import java.text.SimpleDateFormat; 

public final class FileImport { 

    private File fileToImport; 
    private Date[] dateArray; 
    private double[][] dataArray; 

    public FileImport(File myFile) { 
     fileToImport = myFile; 
}//constructor for fileToImport field 

    int lines = 0; 
    String[][]bin; 

    public boolean checkIsFile(){ 
     return fileToImport.isFile(); 
    } 

    public int numberOfLines(){ 
     lines = 0; 
     if(checkIsFile()){ 
      try{ 
       FileReader fr = new FileReader(fileToImport); 
       BufferedReader br = new BufferedReader(fr); 
       while((br.readLine()!=null)){ 
        lines++; 
       }//end while loop 
       br.close(); 
     }catch(Exception e){ 
       System.out.println(e); 
      } 
     } 
      else{ 
       System.out.println("There is no file to import"); 
       } 
     return lines; 
     }//returns number of lines in a txt file 

    public void importToArray(){ 
     int rows = 0; 
     bin = new String[numberOfLines()][6]; 
     try { 
      FileReader fr = new FileReader(fileToImport); 
      BufferedReader br = new BufferedReader(fr); 
      String line = null; 

      while((line = br.readLine())!= null){ 
       StringTokenizer stk = new StringTokenizer(line, ","); 
       while(stk.hasMoreTokens()){ 
        for (int cls = 0;cls<6; cls++){ 
         bin[rows][cls]= stk.nextToken(); 
        } 
        rows++; 
       }//end inner while loop 
      }//end outer while loop 
      br.close(); 
     }//end try 
     catch(Exception e){ 
      System.out.println(e); 
     } 
    }//import data to bin array 

    public void printArray(){ 
     for(int i =0;i<bin.length; i++){ 
      System.out.printf("%s ", i); 
      for(int j =0;j<bin[i].length; j++){ 
       System.out.printf("%s ", bin[i][j]); 
      } 
      System.out.println(""); 
     }//end for loop 
    }//print contents of bin array 

    public String[][] getArray(){ 
     return bin; 
    }//return bin array 

我調用主類的這些方法

package myProva; 

import java.io.File; 
import javax.swing.JFileChooser; 
import javax.swing.filechooser.FileFilter; 
import java.io.*; 

public class ProvaJFrame extends javax.swing.JFrame { 

    /** Creates new form ProvaJFrame */ 
    public ProvaJFrame() { 
     initComponents(); 
    } 

    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code">       
    private void initComponents() { 

     LoadDataButton1 = new javax.swing.JButton(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     LoadDataButton1.setText("Load Data"); 
     LoadDataButton1.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       LoadDataButton1ActionPerformed(evt); 
      } 
     }); 

     javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
     getContentPane().setLayout(layout); 
     layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(53, 53, 53) 
       .addComponent(LoadDataButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(450, Short.MAX_VALUE)) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addGap(122, 122, 122) 
       .addComponent(LoadDataButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addContainerGap(229, Short.MAX_VALUE)) 
     ); 

     pack(); 
    }// </editor-fold>       

    private void LoadDataButton1ActionPerformed(java.awt.event.ActionEvent evt) {             
JFileChooser fileChooser = new JFileChooser(); 
    fileChooser.setFileFilter(new TxtFileFilter()); 
    int returnVal = fileChooser.showOpenDialog(this); 
    if(returnVal == JFileChooser.APPROVE_OPTION){ 

     File myFile = fileChooser.getSelectedFile(); 
     FileImport obj1 = new FileImport(myFile); 
     System.out.println(obj1.checkIsFile()); 
     System.out.println(obj1.numberOfLines()); 

     obj1.importToArray(); 
     obj1.printArray(); 

     System.out.println("--------------------------------------"); 

     } 
    } 

    private class TxtFileFilter extends FileFilter{ 
     public boolean accept(File file){ 
      if(file.isDirectory()) return true; 
      String fname = file.getName(); 
      return fname.endsWith("txt"); 
     } 
     public String getDescription(){ 
     return "txt file"; 
    } 
    }            

    public static void main(String args[]) { 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new ProvaJFrame().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton LoadDataButton1; 
    // End of variables declaration 

我想補充以下方法和主電話,但我不知道該怎麼做,任何人可以幫助我嗎?

public void buildDateArray(String[][]d) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");//set date format here 
     for(int i=0;i<d.length; i++){ 
      for(int j = 0;j<d[i].length; j++){ 
       if(j==0){ 
        try{ 
         Date newDate = (Date)sdf.parse(d[i][0]);//parse first column to Date 
         dateArray[i] = newDate; 
        }//end try 
       catch(Exception e){ 
         System.out.println(e); 
        }//end catch 
      } 
     } 
    }//end for loops 
    } 

    public void buildDataArray(String[][]d){ 
     for(int i=0;i<d.length;i++){ 
      for(int j=0;j<d[i].length; j++){ 
       switch(j){ 
        case 0: 
         dataArray[i][j]=0; 
         break; 
        case 1: 
         dataArray[i][j]=new Double(d[i][j]); 
         break; 
        case 2: 
         dataArray[i][j]=new Double(d[i][j]); 
         break; 
        case 3: 
         dataArray[i][j]=new Double(d[i][j]); 
         break; 
        case 4: 
         dataArray[i][j]=new Double(d[i][j]); 
         break; 
        case 5: 
         dataArray[i][j]=new Double(d[i][j]); 
         break; 
       }//end switch 
      } 
     }//end for loops 
    } 

    public void printDataArray(){ 
     for(int i=0;i<dataArray.length;i++){ 
      for(int j=0;j<dataArray[i].length;j++){ 
       System.out.printf("%s ", dataArray[i][j]); 
      } 
      System.out.println(""); 
     } 
    } 

    public void printDateArray(){ 
     for(int i=0;i<dateArray.length;i++){ 
      System.out.println(dateArray[i]); 
     } 
    } 
} 

謝謝大家。

PS txt文件如下:

 
4887 20100406 6250.01 6265.32 6214.18 6252.21 29445700 
4888 20100407 6248.37 6256.4 6208.52 6222.41 28689600 
4889 20100408 6199.94 6207.14 6138.02 6171.83 30684300    
+1

這是家庭作業 - 請標記,如果是的話。 – 2011-03-04 18:40:20

回答

0

你有,你要呼籲的對象。我假定你丟棄的是同一個。

ProvaJFrame pjf = new ProvaJFrame(); 
pjf.buildDateArray(someData); 
pjf.setVisible(true); 
0

您可以將方法聲明爲靜態,以便可以從main調用它們。像這樣:

public static void buildDataArray(String[][]d){ 
    // ...snip... 
} 
+0

沒錯,但是這樣你可能會很快結束,所有的方法都是靜態的,這是純粹的程序,沒有OOP。 – maaartinus 2011-03-04 19:36:07

+0

確實如此。但它會解決問題,即使它不是最好的設計。當然,並非所有事情都需要OOP。在這種情況下,用於處理它的Java idoim都是靜態的,或者實例化一個單獨的類,然後使用這個類就好像一切都是靜態的。 – troutinator 2011-03-04 20:22:23

+0

我試圖將方法聲明爲靜態,但它不起作用 – 2011-03-04 20:37:49