首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bufferedinputstream帮助

bufferedinputstream帮助
EN

Stack Overflow用户
提问于 2010-12-17 01:32:33
回答 2查看 177关注 0票数 0

我在什么地方看到了下面的代码,我被(ry-'0')部分搞糊涂了。这是做什么的?bis是缓冲的输入流,输入是多个整数的行,每个整数由空格分隔(即2 3 4 5 6)。

代码语言:javascript
复制
static int num()throws IOException{
  rz=0;
  while((ry=bis.read())<'0' || ry>'9'){}
  rz+=(ry-'0');
  while((ry=bis.read())>='0' && ry<='9')
   rz=rz*10+(ry-'0');
  return rz;
 }
EN

回答 2

Stack Overflow用户

发布于 2010-12-17 01:33:47

ry-'0'将存储在ry中的ASCII码字符'0'-'9‘转换为相应的十进制值(0-9)。

“0”转换为0,“1”转换为1,依此类推。

票数 3
EN

Stack Overflow用户

发布于 2010-12-17 02:20:21

aix的答案是正确的,但让我添加一个小解释:

为了理解它,查看表达式ry-'0'的不同实体的类型是很重要的。也许在此之前,我们必须意识到,我们看到的是一个减法,也就是x减去y的表达式,其中x是ry,y是'0'

ryint0char。在Java语言中,可以将char向上转换为int。对于像x-y这样的算术表达式,x和y必须是同一类型。在你的例子中,你有

代码语言:javascript
复制
ry - '0'

也就是说,就类型而言,是int - char。因此,您的Java VM将自动将char转换为int,这将使减号的两个参数按类型匹配。这也是为什么返回值是int类型的原因。您可以通过将rz的声明从int rz更改为char rz来检查这一点:编译器随后会报告您试图在没有显式强制转换的情况下将int (减法的结果)赋给char变量(rz)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4463657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档