QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3608|回复: 6
打印 上一主题 下一主题

JAVA的输入介绍

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 12:06 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<><FONT color=#f70909>作者:意识  转自<a href="http://www.hackbase.com/" target="_blank" >黑基</A>bbs<a href="http://hackbase.com/News/hk" target="_blank" >原创</A>作品版! ~1 |, F5 _. _9 e% S; U
版权归<a href="http://hackbase.com/hacker" target="_blank" >黑客</A>基地所有, 转载请注明出处</FONT></P>- v2 U  s5 Y0 N9 e, i
<>% l9 S1 q2 x9 C6 v4 V
与C和C++相比而言,JAVA的输入就挺复杂的了。好吧我们一步一步的深入<a href="http://hackbase.com/hacker/leak" target="_blank" >研究</A>吧。这篇文章将讨论输入char, int, double 和String类型(String不是JAVA内置的类型)。JAVA中的IO有一整个包。我前一周搞输入搞得晕死了,看JAVA的API看的我眼冒金星,嘎嘎。</P>
! a) l; L) _; z1 f, R/ `4 l<>        先从最简单的char输入开始吧。对于每一个java程序,编译器会自动加载java.lang。这个包中包含了一个键盘输入流System.in(1),我们使用read()方法可以从键盘上读入一个char。<a href="http://hackbase.com/hacker" target="_blank" >代码</A>如下1 P7 a4 v- w5 e- o0 C  r
                char input=(char)System.in.read(); 这个方法的返回的是一个和char相对于的int所以要强制转化为char.。之所以要返回int是因为输入流的结尾是用-1表示的,而char无法表示-1。不过用这个输入在实践中有很多毛病,不提倡使用。好的下面我们使用java.io中的类来进行输入。</P>* _# J' W' g! R. E
<>        我问用到InputStreamReader类。前面我提到了System,in是一个键盘输入流(说明看我的注解)我们使用这个构造方法 InputStreamReader(InputStream in),<a href="http://hackbase.com/hacker" target="_blank" >代码</A>如下</P>0 n8 H8 s8 K& c! ]& s5 o$ W
<>InputStreamReader input = new InputStreamReader(System.in)</P>7 e! s+ [* J& G/ V, x  q
<>char  inputC= (char)input.read();</P>+ O  w( I1 i4 G* Z
8 I1 s4 }, m; f$ j* R! r7 S8 G
<>(1)in8 t; t0 i7 i) Q; f7 v" J) W
public static final InputStream in1 m* t' ~- R6 n" E$ m  Z0 j* j
The "standard" input stream. This stream is already open and ready to supply input data. Typically this stream corresponds to keyboard input or another input source specified by the host environment or user.
# a/ k5 V) r( q% @以上是在java.lang 下System类中 in的说明</P># d5 f& V* q8 a3 X7 S& I
<>String的输入:
+ X2 O# Z3 U4 w$ A; @2 l& o* S上一次的文章中所用的InputStreamReader类,一次只能从输入流一个char如果有很多的字符一起输入不是要读入N次。这里我们要用到缓存(Buffer)好的,输入String我们要使用两个类一个是上面用过的InputStreamReader类用来读输入流,还要一个是新的类BufferedReader类。我们用这个构造方法BufferedReader(Reader in)。看看怎么输入一个String吧
/ F$ P! y) p! I' xBufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));
$ W# `4 h/ [0 x5 K- l5 ~. oinput=stdin.readLine();% V  L. }3 Y: H  |
其中readLine()方法就是读入一行,并返回String9 D" e  B* ^3 |! x# J
现在我们只要能能把String转化为int和double 就可以了
$ g  E# W/ `. v$ x8 o) y" M; o6 g在类int ,double 下有这两个方法parseInt(String s) ,和parseDouble(String s)
& |) y; `, z% \+ \使用这两个方法就可以实现int 和double的输入了。</P>2 D' P/ j# p: b9 S7 C- G
<>上面是对输入时所使用的IO包的基本介绍,在实际中直接使用上面的语句,是无法编译和运行的,因为有异常的存在。(Exception)的存在。异常是一种runtime errors(不懂怎么翻译成中文)比如int a= b/h; 当 h==0时,就是runtime error 。java 中有一个类就是 Exception,用来处理异常的。程序要么在存在可能的异常的情况下运行,用throws 要么用try… catch…来捕捉异常。</P>+ Z6 C1 C" T0 }/ t
<>好了,回到我们的输入上来吧,因为在输入可能没有准备好,比如无法找到键盘。 。所以程序必须使用throws或 try …catch…去捕捉异常,并做出处理方法。 </P>" J  g! \6 L7 q/ }9 y
<>' w8 x" j% q9 z' m
下面是完整的Input输入类的源码</P>
8 f" u% V0 N  X+ P$ v3 Z! ?% s<>import java.io.*;</P>
1 L7 j6 ^! Y3 g/ B) v- @% D<>
( h0 j& J, ?) u* L6 L' n7 \8 I2 r- lclass Input{//class to input7 @3 ?1 M: a0 H  B& h9 h# j
        public static String getString(){//use static make a class method to read a Sring from kedboard</P>) q% B5 d6 p, u' p. i$ D
<>5 M& d# S% ^$ N: O- d
                                        String input="";
( l5 }1 [, J4 u7 O                                         BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));</P>
1 k% i* H) |' ]4 A& V9 n# r( }<>* K! x* m3 U. j2 S6 Y
                                        try{+ s, i9 h# P$ x, e7 \
                                                input=stdin.readLine();
6 \4 j5 V+ D/ n/ v) F1 r                                        }6 n, ]" y0 P( B+ b# h
                                        catch(IOException iox) {9 Y- o0 ?4 [9 K' T7 q3 |5 F
                                                System.err.println(iox);
+ Q+ }/ }0 R1 m: U1 P" K                                        }+ S( H4 x: G2 V+ `/ M& I0 `
                                        return input;! d; t7 `. d7 m3 ]" u6 n5 s
        }
- h4 E# Q$ `2 F( _0 |        public static char getChar()throws java.io.IOException{//class method to read a char from keyboard0 l* V% P7 P; D  J- T7 a/ o: D
                char data;</P>3 C" z3 D: ^  E! J- M: T% k7 W
<>                while(true){8 S2 B2 f' n  @# l* N
                        String input=getString();//get a line input</P>6 u0 X6 S7 o$ u5 T$ ^
<>                        if (input.length()&gt;1) { //catch the too much of the input
* o% o1 F1 R' [                                System.err.println("You must enter a single character");4 {7 ]; y* O/ Y$ [+ l
                                System.err.println("lease enter again");0 [" k/ X1 o( T
                                continue;
5 U: ~/ {. t$ ~- h3 G7 b6 _/ p# H  Y                        }
" X1 E% t% [0 _9 {; K" b2 z                        else {
1 a5 m) P" U1 R$ @; n# ?- y9 t                                data=input.charAt(0) ;" @$ f+ R) |! O9 P% D+ N" U; [: {
                                return data;: {6 l5 L. D" L) W3 f
                        }
( G+ W! K( }1 X2 s/ Q2 |3 s                }
) ]& a% N# |# z: y, S' W7 _7 Q        }
+ e" Q+ W4 C+ z        public static double getDouble( ) throws  java.io.IOException {</P>* E0 W: z7 Q7 u6 I7 ]+ ~
<>                double data;
1 d! e8 j* ]" g9 s9 Z! y                String input = getString();% [* K6 h: N% ?! P
                while(true) {5 y# j, b$ r: ~, [8 M! w
                        try{</P>
5 Z4 k* F: q# S& J<>                                        data=Double.parseDouble(input);! x# T6 n7 [& t' F) ~. a
                                        return data;
2 h' L& R* e1 A: c# D2 J- @                                }6 S0 o/ A# V$ y) d9 }- ?
                        catch(NumberFormatException nfe){//catch the no-number char exception9 z5 B8 ^, a6 C- j; G2 ]% y- W4 {
                                                System.err.println("Not a double number please Enter again");
% i0 p  N2 {& Y- Q                                                continue;
% |1 t6 V) R* m                                }
3 o' T* s. b6 L% }* `# h                        }2 D) L0 N: m. m. C1 ^8 Y+ @- x0 Q
                }</P>) G0 ^8 ?$ }! R
<>public static int getInt( ) throws  java.io.IOException {</P>
+ o" t9 u& w9 k$ k' L, t<>                int data;
8 Z; Z( r  c4 A3 h- W/ d3 ^. C                String input = getString();4 ]- F2 [  v# p
                while(true) {
, V8 S2 x$ B, _& U4 Y3 `9 u. y                        try{</P>
# r! p* ^3 [; D<>                                        data=Integer.parseInt(input);
: z( J! Q! X. d- U9 G* y% W' O                                        return data;
1 k5 y6 s+ J4 G0 {                                }
; |$ P8 {8 P: G0 h                        catch(NumberFormatException nfe){//catch the no-number char exception
* a+ I5 ~$ Z" I# ?+ ^/ c7 P                                                System.err.println("Not a integer number please Enter again");1 o: g6 C2 S: w7 Y) s5 u
                                                continue;
1 y8 Z0 ]7 \9 f& E7 t                                }
! F/ |! F" \2 [3 M4 G. N9 }* ]$ z# |                        }
0 j* n5 ~" Q+ P6 v3 A                }
; _! D. e9 u/ r+ h( p</P>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
xShandow        

43

主题

1

听众

385

积分

升级  28.33%

该用户从未签到

国际赛参赛者

新人进步奖

回复

使用道具 举报

abc.2469 实名认证       

8

主题

3

听众

711

积分

升级  27.75%

该用户从未签到

自我介绍
200 字节以内

不支持自定义 Discuz! 代码

新人进步奖

群组数学建模

群组计算机考研

回复

使用道具 举报

LM386 实名认证       

1

主题

4

听众

157

积分

升级  28.5%

该用户从未签到

自我介绍
数模爱好者

新人进步奖 最具活力勋章

回复

使用道具 举报

Paul_Sing 实名认证       

0

主题

4

听众

43

积分

升级  40%

  • TA的每日心情
    开心
    2014-10-14 13:54
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    软件工程硕士
    回复

    使用道具 举报

    6#
    无效楼层,该帖已经被删除
    randchina        

    0

    主题

    7

    听众

    8

    积分

    升级  3.16%

  • TA的每日心情
    奋斗
    2013-7-22 15:33
  • 签到天数: 1 天

    [LV.1]初来乍到

    自我介绍
    有点懒惰
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-8 00:23 , Processed in 0.617013 second(s), 84 queries .

    回顶部