对于循环…帮助
有人能帮我理解这个循环吗?
byte tempBuffer[] = new byte[64*1024]; for (int i = 0; i < tempBuffer.length; i++) { wavPanel.addAudioByte(tempBuffer[i]); }
在我看来它的工作原理如下:
- 在此期间,循环次数与tempBuffer的大小相同
- 用字节填充tempBuffer或者执行
wavPanel
对象的addAudioByte()
方法n次
对不起我的困惑。
用语言告诉我,循环的作用是什么?
提前致谢。
卡洛斯弗雷拉
字节数组的大小为64 * 1024,因此循环执行64 * 1024次。 每次循环执行时,字节数组的下一个字节将作为参数传递给方法addAudioByte(以第0个元素开头)。
addAudioByte(byte byt)方法的作用取决于此方法的实现。
要回答你在最后一个答案中提到的问题:
byte b代表传递给方法addAudioByte(…)的参数。 这意味着要调用此方法,您必须将数据类型字节传递给此方法。 此链接说明了字节数据类型。
它叫
wavPanel.addAudioByte(...)
对于tempBuffer中的每个64 * 1024(65536)字节,如下所示:
wavPanel.addAuditByte(tempBuffer[0]); wavPanel.addAuditByte(tempBuffer[1]); wavPanel.addAuditByte(tempBuffer[2]); wavPanel.addAuditByte(tempBuffer[3]); wavPanel.addAuditByte(tempBuffer[4]); ....
最终以64 * 1024-1字节结束
... wavPanel.addAuditByte(tempBuffer[65535]);
请记住,虽然此数组中有65 * 1024个字节,但由于数组开始索引为0,因此您不能要求第65536个索引,因为如果从零开始计算它们,那么tempBuffer[65536]
实际上是第65537个字节
这是一个较小的例子来展示基础知识。 让我们用一个只有四个值的小数组:
byte[] tempBuffer = new byte[4]; tempBuffer[0] = 10; tempBuffer[1] = 10; tempBuffer[2] = 10; tempBuffer[3] = 10;
tempBuffer.length
是数组的大小(4个槽),数组中第一个值的索引是0
,最后一个索引是(tempBuffer.length-1) = 3
。
现在循环:
for (int i = 0; i < tempBuffer.length; i++) { // do something }
这将循环4次,每次迭代i
将增加1。 所以在第一次迭代中,i为0
,在最后一次迭代中,我的值为od 3
。
wavPanel.addAudioByte(tempBuffer[i]);
这是最后一个'java魔术'。 tempBuffer [i]是数组中第i个'slot'的值,所以如果i
为0
,则tempBuffer[0]
为10
(根据我们的初始化)。 并且此值将传递给方法wavPanel.addAudioByte(byte b)
。