网上看到段自定义的getInt()来替代cin.nextInt(),不是很明白

龙城狂拽酷霸吊炸天 2013-10-17 12:17:17
自定义的代码 getInt() 在空间开销上只有 nextInt() 的1/30,
然后代码里的"45"、"48"哪里来的?求点拨~
代码如下:
public static BufferedInputStream bis = new BufferedInputStream(System.in);

public static int getInt() throws IOException
{
int i;

while ((i = bis.read()) < 45)
;
// if(i==-1)
// return -1;

int temp = 0, mark = 1;

if (i == 45)
{
mark = -1;
i = bis.read();
}

while (i > 47)
{
temp = temp * 10 + i - 48;
i = bis.read();
}

return mark * temp;
}
...全文
153 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐的2 2013-10-17
  • 打赏
  • 举报
回复
上网上查个ASCII对照表,把45这些跟表里比对下就知道了.
rumlee 2013-10-17
  • 打赏
  • 举报
回复
45对应ascii字符的-,48对应ascii字符的0,实际上这个数字是以字符串的方式存在文件中的,每次读取一个字符。 if (i == 45) 判断第一个字符是不是负号 temp = temp * 10 + i - 48; 将字符转换成对应的数字,并且没增加一位,则将前面的数字乘以10

51,409

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧