对于循环…帮助

有人能帮我理解这个循环吗?

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'的值,所以如果i0 ,则tempBuffer[0]10 (根据我们的初始化)。 并且此值将传递给方法wavPanel.addAudioByte(byte b)