2017-04-05 8 views
0

私はちょっとちょっと混乱しています、私は配列を通してこのコードを通して中央値とモードを見つける必要があり、私はJframesを使っているのでテキストフィールドに入力したいと思います。Jframeで配列を使用してcsvで平均と中央値を求めるにはどうすればよいですか?

これは私が実際にCSV形式の文書で使用しているコードで、それはすでにCSVからファイルを読み込みますが、平均値と中央値のビットは少し混乱しています...

public void theSearch() { 
try { 
    BufferedReader br = new BufferedReader(new FileReader(new File("C:\\Users\\Joshua\\Desktop\\Data Set.csv"))); 
     //BufferedReader br = new BufferedReader(new FileReader(new File("H:\\2nd Year\\Programming Group Project\\Data Set.csv"))); 
     List<String[]> elements = new ArrayList<String[]>(); 
     String line = null; 

     while((line = br.readLine())!=null) { 
      String[] splitted = line.split(","); 
      elements.add(splitted);    
     } 
     br.close(); 
     setMinimumSize(new Dimension(640, 480)); 


     String[] columnNames = new String[] { 
       "Reporting period", "Period of coverage", "Breakdown", "ONS code", "Level", "Level description", "Gender", "Indicator value", "CI lower", "CI upper", "Denominator", "Numerator" 
      }; 

     Object[][] content = new Object[elements.size()][13];{ 
     for(int i=1; i<elements.size(); i++) { 
      content[i][0] = elements.get(i)[0]; 
      content[i][1] = elements.get(i)[1]; 
      content[i][2] = elements.get(i)[2]; 
      content[i][3] = elements.get(i)[3]; 
      content[i][4] = elements.get(i)[4]; 
      content[i][5] = elements.get(i)[5]; 
      content[i][6] = elements.get(i)[6]; 
      content[i][7] = elements.get(i)[7]; 
      content[i][8] = elements.get(i)[8]; 
      content[i][9] = elements.get(i)[9]; 
      content[i][10] = elements.get(i)[10]; 
      content[i][11] = elements.get(i)[11]; 
      content[i][12] = elements.get(i)[12]; 

     } 
     }; 

     jTable.setModel(new DefaultTableModel(content,columnNames)); 
     jScrollPane2.setMinimumSize(new Dimension(600, 23)); 
     jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); 
     add(jScrollPane2); 

     //TableModel model = new DefaultTableModel (content, columnNames); 
     //JTable jTable = new JTable(model); 
     //jTable.setPreferredScrollableViewportSize(new Dimension(1200, 400)); 
     // TableRowSorter<TableModel> sorted = new TableRowSorter <TableModel>(model); 
     // jTable.setRowSorter(sorted); 
     // jTable.setEnabled(false); 
     // JScrollPane pane = new JScrollPane(jTable); 

     System.out.println(jTable.getModel().getValueAt(1, 1)); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

}

+0

ようこそ。あなたのタイトルは、CSV、平均、中央値、配列、およびJFrameを参照しています。しかし、質問を読んで、あなたは本当にちょうど平均と中央値を取得する方法を求めているようです。あれは正しいですか?もし将来的には、あなたが必要とする特定の情報に集中するように質問を単純化するべきです。 – sprinter

+0

ええ、私は平均と中央値を配列に実装することはできません –

答えて

0

平均値や中央値などの統計値を計算するには、文字列ではなく数値が必要です。したがって、まずファイルから読み込んでいる文字列を適切なデータ型に変換する必要があります。 Javaでこれを行う最良の方法は、各行のオブジェクトを表すクラスを作成し、その行をそれらのオブジェクトのコレクションに変換することです。

私はあなたの行はので、私はちょうどここにクラスと呼ぶことにします何を表しているかわからないんだけど:

class Row { 
    private final int reportingPeriod; 
    private final int level; 
    ... 

    public Row(String[] values) { 
     this.reportingPeriod = Integer.valueOf(values[0]); 
     this.level = Integer.valueOf(values[1]); 
     ... 
    } 

    public int getLevel() { 
     return level; 
    } 
} 

List<Row> rows = new ArrayList<>(); 
while((line = br.readLine())!=null) { 
    rows.add(new Row(line.split(",")); 
} 

またはJava 8での:

List<Row> rows = br.lines().map(l -> new Row(l.split(","))).collect(toList()); 

中央値を見つけて、意味します:

int[] levels = new int[rows.size()]; 
int sum = 0; 
for (int i = 0; i < rows.size(); i++) { 
    levels[i] = rows.get(i).getLevel(); 
    sum += levels[i]; 
} 
Arrays.sort(levels); 
int median = levels[rows.size()/2]; 
double mean = (double)sum/rows.size(); 

のJava 8では、これは次のようになります。

int median = rows.stream().mapToInt(Row::getLevel).sorted().skip(rows.size()/2).findFirst().get(); 
double mean = rows.stream().mapToInt(Row::getLevel).average().getAsDouble(); 
関連する問題