解析BufferedReader的输出时出现NumberFormatException

时间:2017-02-03 04:09:40

标签: java bufferedreader numberformatexception

我正在学习使用BufferedReader我只尝试了1个变量(a),我收到了正常答案。但是当我放置两个以上的变量(a和b)时,我得到一个错误。

import java.io.*;

public class Frequency {

  public static void main(String[] args) throws java.io.IOException
  {
    // these are the variables that make up the equation (y)
    double x , y, i, z, w, a, b, c;
    final double t;
    InputStreamReader isr =new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader (isr);
    System.out.println(" Enter the value of a and b to solve for y ");

    String s1 ;
    s1=br.readLine();
    String s2 ;
    s2=br.readLine();

    // variables of the equation
    a =Double.parseDouble(s1);
    b= Double.parseDouble(s2);
    t= 0.002 * Math.pow(10,-2);

    // I separated the equation into different parts
    i= 2*3.14* Math.pow(10, 6) * t ;
    x = Math.sin(i);
    z= 2 * 3.14 *5 * Math.pow(10, 5);
    w= Math.cos(z);
    c= Math.exp(-a*t);

    // equation of y
    y= Math.abs(x+w)/c+ 50*b ;
    System.out.println(" The output of y is " + y);
  }
}

输出 2 3

Exception in thread "main" java.lang.NumberFormatException: For input string: "2 3"
    at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
    at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
    at java.lang.Double.parseDouble(Unknown Source)
    at homeworkcsc201.Frequency.main(Frequency.java:26)

3 个答案:

答案 0 :(得分:2)

您可以通过执行s1=br.readLine();s2=br.readLine();来获取变量的文本,这意味着每个变量都显示在单独的行中。但是,您传入的输入是2 3,这一切都在一行上。

发生异常是因为您尝试将每一行解析为单个数字:a = Double.parseDouble(s1);b = Double.parseDouble(s2);parseDouble要求整个字符串表示单个数字,但您将"2 3"作为s1传递,这正是错误消息告诉您的内容。

正确的做法是键入 2 ,按 Enter ,然后按 3 ,再按 Enter 。基本上,将每个数字放在程序所需的单独行上。

答案 1 :(得分:1)

  

at java.lang.Double.parseDouble(Unknown Source)

堆栈跟踪显示失败在方法parseDouble中,该方法需要一个十进制数,但是给出了两个。 (2 3)。

您应该将输入数字放在不同的行上,或者修改程序以在将数字传递给parseDouble之前拆分数字。

答案 2 :(得分:0)

而不是提供2 3

尝试给予

2
3