Java.lang.NumberFormatException错误
我有一个错误: 输出显示来自程序的3个C。我自己打了“12.34” 预期产出应为: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
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());