为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这段代码里面会产生循环?为什么 b和i的值会变化?

FileInputStream in =new FileInputStream(fileName);
        int b=in.read();
	int i=1;
	while((b=in.read())!=-1){
	System.out.print(Integer.toHexString(b)+"  ");
		if(i++%10==0){
			System.out.println();
		}
	}

每次in.read()都会自动往后挪一个字节?

这个if条件里面,无论是否满足都会执行i++吗?

正在回答

3 回答

while后面的(b=in.read())!=-1返回的是一个布尔值,而这个值只有在文件读到结尾的时候才返回false,即in.read==-1,所以在读完之前返回的都是true,都可以执行循环

b的值本身不会变化,但是文件的指针pointer在每次循环后都会加1,所以每次b读出来的值都是不一样的

if的判断条件是i++%10==0,先判断i%10的值是否为0,然后自增1,此时i=i+1,然后进入下一个循环,判断i+1的值除以10余数是否为0,所以就算if的条件不满足,i也执行了自增

1 回复 有任何疑惑可以回复我~
#1

慕粉1052051344

运算优先级应该是++在前,%在后吧。
2017-06-23 回复 有任何疑惑可以回复我~

结束循坏的条件是in.read()==-1,因为读到-1就表示结束了

0 回复 有任何疑惑可以回复我~

in.read() 会后移的, 条件不满足是不是i++的

0 回复 有任何疑惑可以回复我~
#1

慕粉4241372 提问者

最后一句没懂。从程序执行结果来说,就算if里面的判断条件不满足,i也会执行++吧,要不然这个i的值就不会变化了
2017-03-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这段代码里面会产生循环?为什么 b和i的值会变化?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信