【发布时间】:2013-05-13 14:17:02
【问题描述】:
Java 初学者在这里。为了测试,我创建了自己的使用 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);
}
}
它的问题是,每当我读取一个字符,然后尝试读取一个整数,它就会跳转到 else 条件并输出No valid input. Please try again。我认为这是因为有旧的输入(例如换行符)到处乱飞。我该如何清理它?
【问题讨论】:
-
你试过调试你的代码吗?我认为问题在于,您不能将字符串 (-> char[]) 转换为 char。也许读取缓冲区包含不可打印的字符?
-
我认为这不是问题,因为它可以正常工作多次,并且当我只使用 float 和 int 时也会打印错误消息。
-
你是如何输入的?你在输入类似“a”[输入键]“1”[输入键]的东西吗?
-
等等!类型转换和 Class Float 或 Integer 的 Parsing-method 之间有很大很大的区别!
-
我知道。也许我不明白你在暗示什么?! @Farlan,是的,我就是这样做的。
标签: java newline inputstream bufferedreader