Java.lang.NumberFormatException错误

时间:2012-05-06 18:04:17

标签: java serial-port

我遇到了这个错误:

输出显示3 C来自程序。我自己输入“12.34”。

预期的产出应该是:

C
C
C
12.34
12.34 is the first string
12.34 is the second string

12.34本来应该被转换成双倍但我得到了奇怪的角色。

enter image description here

我无法找到解决方案。我尝试了不同的方法,但我仍然遇到了同样的错误。

这是我的计划:

    int ch = 0;
    int i = 0;
    int counter = 0;
    int sum = 0;
    double[] conArray = new double[3];
    //string[] conArray = new string[3];
    double dataDbl;
    String dataStr = null;
    double data = 0;
    String s = "C";
    String t = "Hello";
    //StringBuffer sb = new StringBuffer();
    //String con = "C";
    ////System.out.println("Starting!");
    System.out.println("C");
    buffer.setLength(0);
    System.out.println("C");
    buffer.setLength(0);
    System.out.println("C");

    buffer.delete(0,buffer.length());


    while (i < 300) {
        ch = inStream.read();
        if ((ch == '\r') || (ch == '\n')) {
            i = 300;
        }
        buffer.append((char)ch);
        i++;
    }
    dataStr = buffer.toString();
    dataDbl = Double.parseDouble(dataStr.trim());

    conArray[counter] = dataDbl;

    outStream.writeChars(dataStr);
    System.out.println(" is the first string"); 

    outStream.writeDouble(conArray[counter]);
    System.out.println(" is the first data");  

    buffer.delete(0,buffer.length());
    counter++;

我找到了修复程序,现在是:

                int trash = 0;
                trash = inStream.read();
                System.out.println("C");
                while (true) {
                    ch2 = inStream.read();
                    if ((ch2 == '\r') || (ch2 == '\n')) {
                        break;
                    }

                    if (ch2 != 32) {
                       sb.append((char)ch2);
                    }

我放了一个名为trash的整数来删除inStream之前的空格或不需要的字符。工作得很完美。问题是串行设备用和终止其输出。这两个在缓冲区中保持未读状态,因此当读取下一个数据时,实际上没有任何内容,因此在Double.parseDouble(dataStr.trim());中发生错误。

2 个答案:

答案 0 :(得分:2)

在解析之前,将您尝试解析的字符串打印为控制台的两倍:

System.out.println(dataStr.trim());

它应该显示一个可解析的双精度(在你的情况下为12.34)否则你从流中获取错误

答案 1 :(得分:1)

退出循环的最简单方法是使用break;在您的情况下,您确保循环将退出,但您仍然会将\r\n添加到缓冲区中不是数字的一部分。

单步执行调试器是了解代码执行情况的最快方法,尤其是当它没有按照您的预期执行时。在IDE中,它通常是Run。旁边的按钮。