学习java也有一段时日了,每当要输出显示的时候,System.out.println就会被我毫不犹豫地敲了出来。今天突然看到一小程序,大致如下:
……
public static void main(String args[]) throws IOException {
int x;
System.out.println("请输入考生成绩:");
x=System.in.read();
if ((x >= 0) && (x <= 100)) {
System.out.println("您输入的考生成绩是:" + x);
……
} else
System.out.println("对不起,您输入的数据是非法的");
}
……
得到的结果出乎我意料:
请输入考生成绩:
1
您输入的考生成绩是:49
请输入考生成绩:
4
您输入的考生成绩是:52
原来System.in.read()从控制台是按字符读取,x的值是该字符的ASCII码值。所以要对该字符简单“包装”一下:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
x=Integer.parseInt(in.readLine());
//如果要读取字符串,则:String s =in.readLine();
这样我们就可以得到我们想要的输入值啦。
下面是一个引自冷月学堂的一个详细示例:
使用 System.in 就可以捕获控制台输入。System.in 是一个 InputStream 的实例,为了方便,我们还可以使用 BufferedReader 来包装这个对象。
package jamesfancy;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
System.out.print("What's your name: ");
String name = reader.readLine();
boolean male = false;
while (true) {
System.out.print("Are you male (True/False): ");
String sMale = reader.readLine().trim();
if (sMale.equalsIgnoreCase("true")
|| sMale.equalsIgnoreCase("false")) {
male = Boolean.parseBoolean(sMale);
break;
} else {
System.out.println("You can only input TRUE or FALSE here.");
}
}
int age = 0;
while (true) {
System.out.print("How old are you: ");
String sAge = reader.readLine();
try {
age = Integer.parseInt(sAge);
break;
} catch (NumberFormatException nfe) {
System.out.println("Please input a integer as your age.");
}
}
System.out.println("Hello " + name + ". I am so glad to meet you, a "
+ age + " years old pretty " + (male ? "boy" : "girl") + ".");
}
}
James Fancy
yes
true
twenty-five
25
发表于 @ 2005年09月19日 22:05:00|评论(loading...)|编辑