Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java.lang.NumberFormatException错误_Java_Serial Port - Fatal编程技术网

Java.lang.NumberFormatException错误

Java.lang.NumberFormatException错误,java,serial-port,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本来应该改成双人的,但我改成了奇怪的角色 我没能找到解决办法。我尝试了不同的方法,但还是犯了同样的错误 这是我的节目: int ch = 0; int i = 0; int counter = 0; int sum = 0; dou

我有一个错误:

输出显示来自程序的3个C。我自己打了“12.34”

预期产出应为:

C
C
C
12.34
12.34 is the first string
12.34 is the second string
12.34本来应该改成双人的,但我改成了奇怪的角色

我没能找到解决办法。我尝试了不同的方法,但还是犯了同样的错误

这是我的节目:

    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++;

我在inStream之前放置了一个名为trash的整数来去除空格或不需要的字符。工作得很好。问题是串行设备使用和终止其输出。这两个变量未读就留在缓冲区中,因此当读取下一个数据时,实际上什么都不存在,因此在Double.parseDouble(dataStr.trim());;处会发生错误

退出循环的最简单方法是使用
break
在本例中,您确保循环将退出,但仍将
\r
\n
添加到不属于数字的缓冲区


单步调试是发现代码正在做什么的最快方法,尤其是当它没有做您期望的事情时。在IDE中,它通常是“运行”旁边的按钮。

在解析字符串之前,将您试图解析的字符串以双精度打印到控制台:

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

它应该显示一个可解析的double(在您的例子中是12.34),否则您从流中获取它时出错了

知道错误发生的原因吗?同意@juergend,此外,此代码未编译,您在哪里定义缓冲区?如何接受?我知道这听起来很愚蠢…只需单击最佳答案左侧的绿色大复选标记,但您应该阅读第一个…好的,我将检查所有线程。我可以使用调制解调器运行调试器吗?我正在将程序上传到其中。我会首先让程序在本地运行,模拟您没有的任何设备/服务。我尝试了它,它看起来应该是(12.34)…但没有通过outStream显示什么类型的对象是outStream?你希望它出现在哪里,console?我不认为问题出在outStream上。我修好后再给你打电话。:)
System.out.println(dataStr.trim());