NumberformatException JFreeChart

时间:2015-11-14 18:33:29

标签: java jfreechart

输入文件(内容):

8dict, 3
9GAG, 2
RT, 7
The, 2
awkward, 2
co, 14
http, 11
https, 3
irrfan_k, 2
is, 2
my, 3
rainymornings, 3
t, 14
the, 2
this, 2
you, 3

我的代码是:

package pck;

import java.io.*; 
import java.util.StringTokenizer; 
import org.jfree.chart.ChartUtilities; 
import org.jfree.chart.ChartFactory; 
import org.jfree.chart.JFreeChart; 
import org.jfree.data.general.DefaultPieDataset;

public class PieChart_File 
{
   public static void main( String[ ] args )throws Exception
   {
      String mobilebrands[ ] = {    
        "8dict" ,   
        "9GAGs" ,   
        "RT" ,    
        "The" ,
        "awkward",
        "co",
        "http",
        "https",
        "irrfan_k",
        "is",
        "my",
        "rainymornings",
        "t",
        "the",
        "this",
        "you"
      };

      InputStream in = new FileInputStream( new File( "C:/temp/test.txt" ) );          
      BufferedReader reader = new BufferedReader(new InputStreamReader(in ) );          
      StringBuilder out = new StringBuilder();          
      String line;          
      DefaultPieDataset dataset = new DefaultPieDataset();          

      while (( line = reader.readLine() ) != null ) 
      {
         out.append( line );
      }
      StringTokenizer s = new StringTokenizer( out.toString(), "," );
      int i=0;      
      while( s.hasMoreTokens( ) && ( mobilebrands [i] != null ) )
      {

          dataset.setValue(mobilebrands[i], Double.parseDouble( s.nextToken( ) ));
         i++;
      }
      JFreeChart chart = ChartFactory.createPieChart( 
         "Repeated words",  // chart title           
         dataset,         // data           
         true,            // include legend           
         true,           
         false);

      int width = 560; /* Width of the image */          
      int height = 370; /* Height of the image */                          
      File pieChart = new File( "pie_Chart.jpeg" );                        
      ChartUtilities.saveChartAsJPEG( pieChart, chart, width, height); 
   }
}

当我尝试运行该文件时出现以下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: "8dict"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at pck.PieChart_File.main(PieChart_File.java:48)

只有出现此错误才能正确导入所有文件。输入文件路径也是正确的。 请帮忙。

3 个答案:

答案 0 :(得分:0)

您尝试将String解析为数值,但当然无法解析String," 8dict"的值是多少?如果你解析它?

您应该尝试仅解析每个String的第一个数值。

使用RegExs的解决方案

替换

def eq1():
    # d = Vi*t + 1/2*a*t^2
    print("Equation 1!")
    answer = # d = Vi*t + 1/2*a*t^2
    print("Your answer is:", answer)

使用

dataset.setValue(mobilebrands[i], Double.parseDouble( s.nextToken( ) ));

答案 1 :(得分:0)

替换此

dataset.setValue(mobilebrands[i], Double.parseDouble( s.nextToken( ) ));

使用

dataset.setValue(s.nextToken( ), Double.parseDouble( s.nextToken( )));

因为在进入循环时,StringTokenizer中的初始值将是8dict而不是3,这是一个字符串而不是数字。

答案 2 :(得分:0)

您应该像这样更改输入文件的内容:

8dict, 3,
9GAG, 2,
RT, 7,
The, 2,
awkward, 2,
co, 14,
http, 11,
https, 3,
irrfan_k, 2,
is, 2,
my, 3,
rainymornings, 3,
t, 14,
the, 2,
this, 2,
you, 3

变量 out 的值为:

8dict, 3,9GAG, 2,RT, 7,The, 2,awkward, 2,co, 14,http, 11,https, 3,irrfan_k, 2,is, 2,my, 3,rainymornings, 3,t, 14,the, 2,this, 2,you, 3

使用 nextToken()方法可从变量 s 获取令牌。第一个令牌包含字母和数字,第二个令牌仅包含数字,依此类推。

  1. 您必须将 nextToken()方法分配给变量 token

Object token = s.nextToken();

您将获得第一个包含字母和数字的令牌(8dict)。

  1. 您必须再次将 nextToken()方法分配给变量令牌。

    token = s.nextToken();

您将获得仅包含数字(3)的第二个令牌。

  1. 您可以将此令牌解析为数字值。

Double.parseDouble(token.toString())

必须将1到3的点放入while循环中。


替换此:

while(s.hasMoreTokens() && (mobilebrands[i] != null))
{
    dataset.setValue(mobilebrands[i], Double.parseDouble(s.nextToken()));
    i++;
}

与此:

while(s.hasMoreTokens() && (mobilebrands[i] != null))
{
    Object token = s.nextToken();
    token = s.nextToken();
    dataset.setValue(mobilebrands[i], Double.parseDouble(token.toString()));
    i++;
}