java输入函数_Java(四)输出和输入函数

在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。

在学习Java的输入时,有个有趣的发现,感兴趣的朋友可以往下看。

Java版的getchar()函数:(char)System.in.read()

当时想的是,既然输出用的是out对象,那么必然有个in对象的方法能完成输入的功能。于是就发现了System.in.read()这个东东,它实现的功能是:从键盘读一个字符。好嘛^_^,那么就输下这个东东

System.out.println(System.in.read());

运行结果:

10eb632b24f366de0dde8ac38a4eb576.png

结果很意外,输入5,输出53 13 10;输入a,输出97 13 10;什么也不输直接回车,输出13 10。即输出了输入字符、回车控制字符和换行控制字符的ASCLL码!!

不,我不要ASCLL码数字,我要字符型!那么就强转一下吧。改下代码:

System.out.println((char)System.in.read());

果然如愿输出了字符型,而且回车控制字符和换行控制字符都不见了!而且经测试,结果完全符合算法题中的输入的要求,即在Java中实现了类似C++中的getchar()函数:(char)System.in.read()

再进一步思考,加个while(true)能否用字符数组形式输出字符串呢?

代码如下:

importjava.io.IOException;public classdd {public static void main(String[] args) throwsIOException {while(true){

System.out.print((char)System.in.read());

}

}

}

运行结果:

46280152417ad020450470eb854c96b1.png

成功得到了字符串是不是?

实际并没有。。

这个方法有极大的缺陷:

System.out.println((char)System.in.read());

实际就相当于:

InputStream a=System.in;char ch=(char)a.read();

System.out.print(ch);

果然还是没有摆脱缓冲区的束缚,把刚才输出字符串的代码的while(true)换成for循环:

importjava.io.IOException;public classdd {public static void main(String[] args) throwsIOException {//while(true){

for(int i=0;i<5;i++){

System.out.print((char)System.in.read());//}

}

}

}

运行结果:

d955f41f2fee9ba7d10127565467bff1.png

只能读for循环限制的5个字符。。while(true)只是用一个死循环把输入缓冲区的字符都读完了而已,才造成了这种方法能读字符串的假象,

再回到C/C++想想,这个真的和getchar()一样。。

参考下面代码:

#include

intmain()

{while(1)

{char a=getchar();

printf("%c",a);

}return 0;

}

运行结果:

365020f4fa430bf1eb9f72b5f7a81b00.png

曾经,getchar()是否给了你它能输出字符串的假象呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值