亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

當中的while問題

public static void main(String[] args) throws IOException{

FileInputStream files = new FileInputStream("C:\\Users\\26023\\Desktop\\html.txt");

int n = 0;

byte[] bytes = new byte[1024*3];

int j = 1;

//從files中讀出數據存放到bytes

while((n=files.read(bytes, 0, bytes.length))!=-1){

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

System.out.print(Integer.toHexString(bytes[i]&0xff)+" ");

if(j++ %10 == 0) {

System.out.println();

}

}

}

files.close();

}

為什么在while里的for中,要用n(課程里用的bytes)作為限制條件

正在回答

2 回答

以題主的代碼為例:

我所理解題主的困惑在于,for循環中限制條件為什么是n而bytes.length。

首先我簡要解釋一下這個n與bytes.length的區別:

  1. length是一個in類型的整數,用于記錄bytes這個字節數組的長度。length表示這bytes的最大容量,是一個大小始終不變的固定值。

  2. n是也一個int類型的整數,用于接受file的read方法的返回值。因為這個返回值表示一次讀取從bytes數組中到的字節數,所以n就隨著每次從bytes中讀取的字節數的變化而變化。

  3. 看來這里題主可能會想,file的read方法每次從bytes中讀取的字符數難道不都是length嗎?這樣n豈不是恒等于length嗎?這樣for有的限制條件不是選擇n與length都行了嗎?

上面一連串的推測似乎合情合理。其實題主請思考一下,while循環中的read方法真每次都能讀到length個字節碼?

題主是否考慮到read方法讀到了文本末尾的情況呢?最后一次讀取中,題主所選的文本是否還有足夠的字節流入到bytes字節數組呢?到了這里,不知道題主是否明了。

如果您仍有疑問,可以私我,我會盡快回復。望采納。

1 回復 有任何疑惑可以回復我~

https://img1.sycdn.imooc.com//5b15664b0001c8cc08070551.jpg

https://img1.sycdn.imooc.com//5b1566da0001443408950319.jpg

你把這兩段代碼對比著來看 應該能明白 ? 定義了一個n專門用來實現讀的操作 ?當讀到符號位(-1)的時候 停止讀的操作 ?這其實就是一個普通的for循環 ?

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

舉報

0/150
提交
取消

當中的while問題

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號