2016-05-27 7 views
0

ユーザーが選択したJTable列をArrayListに変換しようとしています。すべての列は(データベースからの)文字列なので、キャストは列の選択時に行われます。しかし、以下のコードを使用すると、NumberformatExceptionが発生し、その理由がわかりません。文字列を整数に解析しようとするときの数値書式の例外

TableColumnModel columnModel = table.getColumnModel(); 
columnModel.addColumnModelListener(new TableColumnModelListener() { 
// other methods 
public void columnSelectionChanged(ListSelectionEvent e) { 

    Object[] data = columnToArray(table,table.getSelectedColumn()); 
    ArrayList<Float> descstats=new ArrayList<Float>(); 
    System.out.println("MY data length"+data.length); 
    try { 
     for(int i = 0; i < data.length; i++){ 
      if (data[i]!=null){  
       System.out.println(Integer.parseInt((data[i]).toString().trim())); 
       descstats.add(Float.parseFloat((data[i]).toString().trim())); 
      } 
     } 
    } catch (NumberFormatException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    float sum = 0; 
} 
} 
+2

エラー・スタックトレースを投稿してくださいすることができないのだろうか?このメソッドに渡すデータ例 –

+2

推測: 'Integer.parseInt'を行い、' Float.parseFloat'で値を保存します。数値がfloatの場合、 'Integer.parseInt'は失敗し、intにキャストされません(つまり、Integer.parseInt(" 6,2 ")'は例外を返しますが、6を返しません)。 – BackSlash

+1

この例外の原因となる入力は何ですか? – Mureinik

答えて

4
if (data[i] != null) { 
    System.out.println(Integer.parseInt((data[i]).toString().trim())); 
    descstats.add(Float.parseFloat((data[i]).toString().trim())); 
} 

あなたはInteger.parseIntを行い、その後、Float.parseFloatで値を保存します。数がfloatであれば、Integer.parseIntは失敗します、それはintキャスト(すなわちInteger.parseInt("6.2")NumberFormatExceptionを上げるだろう、それは6を返しません)

関連する問題