我遇到了这个错误:
输出显示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++;
我找到了修复程序,现在是:
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());中发生错误。
答案 0 :(得分:2)
在解析之前,将您尝试解析的字符串打印为控制台的两倍:
System.out.println(dataStr.trim());
它应该显示一个可解析的双精度(在你的情况下为12.34)否则你从流中获取错误
答案 1 :(得分:1)
退出循环的最简单方法是使用break;
在您的情况下,您确保循环将退出,但您仍然会将\r
或\n
添加到缓冲区中不是数字的一部分。
单步执行调试器是了解代码执行情况的最快方法,尤其是当它没有按照您的预期执行时。在IDE中,它通常是Run。旁边的按钮。