2012-05-06 60 views
-2

我有此錯誤:Java.lang.NumberFormatException錯誤

輸出顯示圖3C的其是從該程序。我自己輸入「12.34」。

預料的輸出應該是:

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

12.34本來是要轉換爲double,但我得到了奇怪的字符來代替。

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); 
        } 

我把所謂的垃圾擺脫inStream中之前的空間或不需要的字符的整數。完美工作。問題在於串口設備通過和終止輸出。這兩個保留在未讀取的緩衝區中,因此當讀取下一個數據時,沒有什麼真正存在的,因此Double.parseDouble(dataStr.trim());發生錯誤。

+0

任何想法爲什麼發生錯誤? –

+0

同意@juergend,此外,這段代碼不會編譯,你在哪裏定義緩衝區? –

+0

如何接受?我知道這聽起來很愚蠢...... –

回答

1

退出循環的最簡單方法是使用break;你的情況,你要確保循環將退出,但你仍然會增加\r\n到這不是一個數字的一​​部分緩衝區。

單步執行調試器是找出代碼執行的最快捷方式,尤其是當它沒有達到您期望的效果時。在IDE中,它通常是Run旁邊的按鈕。

+0

我可以使用調制解調器運行調試器嗎?我正在上傳程序。 –

+1

我會先在本地工作,模擬您沒有的任何設備/服務。 –

2

打印您試圖解析爲雙控制檯,只是解析它之前的字符串:

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

它應該顯示可解析雙(在你的案件12.34),否則你做錯了什麼得到它從流

+0

我試過了,它應該是(12.34)。 –

+0

...但沒有通過outStream出現 –

+0

outStream是什麼樣的對象?你在哪裏期待它出現,控制檯? –

相關問題