2012-05-06 2 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 должен был быть преобразован в два раза, но я получил странные символы вместо этого.

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 обычно используется кнопка «Выполнить».

+0

Могу ли я запустить отладчик с модемом? Я загружаю программу в нее. –

+1

Я бы получил программу, работающую локально сначала, эмуляцию любых устройств/служб, которых у вас нет. –

2

печати струнный вы пытаетесь разобрать, как двойной консоли, как раз перед его анализом:

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

Он должен показать распознаваем дважды (в вашем случае 12.34), иначе вы делаете что-то неправильно получать его из потока

+0

Я попробовал, и он появился, как и должно быть (12.34). –

+0

... но не отображается через outStream –

+0

Какой объект OutStream? И где вы ожидаете, что он появится, консоль? –

Смежные вопросы