У меня есть странная проблема:Невозможно прочитать Double с помощью сканера
если я передал строку «7 + 4», мой призыв к nextDouble() сгенерирует исключение InputMismatchException.
здесь полный код:
char ch;
try {
ch = getChar();
}
catch(EOF e) //On détecte la fin de la chaine
{
return new Token(null);
}
//Si c'est un chiffre
if(Character.isDigit(ch))
{
pushback(ch);
//On récupère un nombre
Scanner sc = new Scanner(in);
Token t = new Token(TokenKind.Number, sc.nextDouble());
sc.close();
return t;
}
метод GetChar:
private char getChar()
{
try
{
//On essaie de lire un charactère.
int tmp_char = in.read();
//Si le charctère n'est pas un caractère ASCII, on lève une exception.
if(Character.charCount(tmp_char) != 1) throw new IllegalCharacterException();
return Character.toChars(tmp_char)[0];
}
catch (IOException e) {throw new EOF();}
}
И теряемое (символ с)
private void pushback(char ch)
{
try
{
in.unread(ch);
}
catch (IOException e) {e.printStackTrace(); throw new RuntimeException("IOException");}
}
И in
является PushbackReader инициализируется с " 7 + 4 ".
Если я звоню nextLine()
до nextDouble()
, он возвращает «4 + 7».
Что я сделал неправильно? Я на самом деле не понимаю ...
Прочитайте, как значение 'double' определено как строка [здесь] (http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#valueOf%28java .lang.String% 29). – hexafraction