-3

このエラーが発生しています:

出力には、プログラムからの 3 つの C が表示されます。自分で「12.34」と入力しました。

予想される出力は次のようになります。

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

12.34 は double に変換されるはずでしたが、代わりに奇妙な文字が表示されました。

ここに画像の説明を入力

解決策を見つけることができませんでした。さまざまな方法を試しましたが、それでも同じエラーが発生しました。

これが私のプログラムです:

    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 の前にスペースや不要な文字を取り除くために、trash という整数を配置します。完璧に機能しました。問題は、シリアル デバイスの出力が と で終了することでした。これら 2 つは読み取られずにバッファーに残るため、次のデータが読み取られるときに実際には何もないため、Double.parseDouble(dataStr.trim()); でエラーが発生します。

4

2 に答える 2

2

解析する直前に、解析しようとしている文字列を double としてコンソールに出力します。

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

解析可能なダブル(あなたの場合は12.34)を表示する必要があります。それ以外の場合は、ストリームから取得するのに何か問題があります

于 2012-05-06T18:33:50.007 に答える
1

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

デバッガーをステップ実行することは、コードが何を行っているかを知るための最も簡単な方法です。IDE では、通常、[実行] の横にあるボタンです。

于 2012-05-06T18:10:46.593 に答える