2012-05-06 2 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이 두 배로 변환하기로했지만, 난 대신 이상한 문자를 얻었다.

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

루프를 종료하는 가장 간단한 방법은 루프가 종료됩니다 확인하고 있습니다하지만 여전히 숫자의 일부가 아닌 버퍼에 \r 또는 \n을 추가 할 예정 귀하의 경우에는 break;을 사용하는 것입니다.

디버거를 따라 가면서 코드가 무엇을하는지 알아 보는 가장 빠른 방법입니다. IDE에서 일반적으로 실행 옆에있는 버튼입니다.

+0

모뎀으로 디버거를 실행할 수 있습니까? 나는 그 안에 프로그램을 업로드하고있다. –

+1

나는 당신이 가지고 있지 않은 모든 장치/서비스를 에뮬레이트하여 프로그램을 로컬에서 처음으로 사용하게 될 것이다. –

2

인쇄 당신은 단지 그것을 분석하기 전에, 콘솔로 더블 구문 분석하려고하는 문자열 : 그것은 (귀하의 경우 12.34에서)를 구문 분석 더블을 표시해야합니다

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

그렇지 않으면 당신이 그것을 점점 뭔가 잘못하고있다 스트림에서

+0

나는 그것을 시험해 보았다. (12.34)와 같이 나타났다. –

+0

... outStream을 통해 나타나지만 나타나지 않습니다. –

+0

outStream은 어떤 종류의 객체입니까? 그리고 당신이 그것을 나타 내기를 기대하고 있습니까, 콘솔? –

관련 문제