Java начинающий здесь. Для тестирования я сделал свой собственный класс ввода, который использует BufferedReader. Код выглядит следующим образом:BufferedReader читает старый вход
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class inputter {
private static BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
/**
* @param
* A reader for chars
* @throws IOException
*/
public static char getChar() throws IOException{
int buf= read.read();
char chr = (char) buf;
while(!Character.isLetter(chr)){
buf= read.read();
chr = (char) buf;
}
return chr;
}
/**
* @param currencies, names
* A reader for Ints
* @throws IOException
*
*/public static int getInt()throws IOException{
String buf = read.readLine();
while(!buf.matches("[-]?(([1-9][0-9]*)|0)")){
buf = read.readLine();
System.out.print("No valid input. Please try again.");
}
return Integer.parseInt(buf);
}
/**
* @param currencies, names
* A reader for Floats
* @throws IOException
*
*/
public static float getFloat()throws IOException{
String buf = read.readLine();
while(!buf.matches("[-]?(([1-9][0-9]*)|0)(\\.[0-9]+)?")){
System.out.print("No valid input. Please try again.\n");
buf = read.readLine();
}
return java.lang.Float.parseFloat(buf);
}
}
Проблема с ним всякий раз, когда я прочитал символ, например, и после этого попытаться прочитать целое, он переходит к состоянию и выходов No valid input. Please try again
еще. Я предполагаю, что это связано с тем, что у нас есть старый вход (например, символ новой строки). Как я могу это очистить?
Вы пытались отладить свой код? Я думаю, проблема в том, что вы не можете преобразовать строку (-> char []) int char. возможно, буфер чтения содержит непечатаемые символы? – desperateCoder
Я не думаю, что это проблема, так как она работает многократно, и сообщение об ошибке печатается, когда Im работает только с float и int. – hellerve
Как вы вводите ввод? Вы пишете что-то вроде «a» [введите ключ] «1» [ввести ключ]? – Farlan