2012-05-06 12 views
-2

私はこのエラーが発生しています:Java.lang.NumberFormatExceptionエラー

出力には、プログラムの3つのCが表示されます。私は自分で「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前にスペースや不要な文字を取り除くために呼ばれる整数を置きます。完璧に働いた。問題は、シリアルデバイスがとの出力を終了することでした。これらの2つは未読バッファに残り、次のデータが読み込まれると実際には何も存在しないため、Double.parseDouble(dataStr.trim());でエラーが発生します。

+0

エラーが発生した理由は何ですか? –

+0

@juergendに同意してください。さらに、このコードはコンパイルされません。どこでバッファを定義していますか? –

+0

受け入れる方法?私はこれがとてもばかげていることを知っています... –

答えて

1

ループを終了する最も簡単な方法は、あなたがループが終了します確認しているが、あなたはまだ数の一部ではないバッファに\rまたは\nを追加していく予定あなたのケースではbreak;を使用することです。

デバッガをステップすることは、コードが何をしているかを調べる最も簡単な方法です。 IDEでは、通常は「実行」の横にあるボタンです。

+0

モデムでデバッガを実行できますか?私はそれにプログラムをアップロードしています。 –

+1

私はあなたが持っていないデバイス/サービスをエミュレートして、プログラムをローカルで最初に動作させます。 –

2

印刷あなたはそれを解析する前に、コンソールに二重に解析しようとしている文字列:

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

それはそうあなたがそれを得る何か間違ったことをやっている(あなたのケース12.34)で解析可能なdoubleを示すべきですストリームから

+0

私はそれを試して、それは(12.34)でなければならないように見えました。 –

+0

... outStreamには表示されません –

+0

outStreamはどのようなオブジェクトですか?そして、あなたはそれが現れることを期待していますか、コンソール? –

関連する問題