Для цикла ... помогите - PullRequest
0 голосов
/ 06 июля 2010

Может кто-нибудь помочь мне понять этот цикл?

byte tempBuffer[] = new byte[64*1024];

for (int i = 0; i < tempBuffer.length; i++) {
    wavPanel.addAudioByte(tempBuffer[i]);
}

На мой взгляд, это работает так:

  • цикл столько раз, сколько размер tempBuffer тем временем
  • заполните tempBuffer байтами или, возможно, выполните метод addAudioByte() объекта wavPanel n раз

Извините за мое замешательство.

Может кто-нибудь сказать мне, на словах, что делает цикл?

Заранее спасибо.

Карлос Фререра

Ответы [ 3 ]

9 голосов
/ 06 июля 2010

Массив байтов имеет размер 64 * 1024, поэтому цикл выполняется 64 * 1024 раза. Каждый раз, когда цикл выполняется, следующий байт из байтового массива передается методу addAudioByte (начиная с 0-го элемента) в качестве параметра.

То, что делает метод addAudioByte (byte byt), зависит от реализации этого метода.

Чтобы ответить на ваш вопрос, который вы задали в последнем ответе:

байт b обозначает параметр, который передается вашему методу addAudioByte (...). Это значит, что для вызова этого метода необходимо передать байт типа данных этому методу. Эта ссылка объясняет тип байтовых данных.

7 голосов
/ 06 июля 2010

Он вызывает

wavPanel.addAudioByte(...)

для каждого из 64 * 1024 (65536) байтов в tempBuffer, например так:

wavPanel.addAuditByte(tempBuffer[0]);
wavPanel.addAuditByte(tempBuffer[1]);
wavPanel.addAuditByte(tempBuffer[2]);
wavPanel.addAuditByte(tempBuffer[3]);
wavPanel.addAuditByte(tempBuffer[4]);
....

в конечном итоге заканчивается на 64 * 1024-1byte

...
wavPanel.addAuditByte(tempBuffer[65535]);

Помните, что, хотя в этом массиве 65 * 1024 байта, так как массивы начинают индексировать 0, вы не можете запросить 65536-й индекс, потому что, если вы посчитали их, начиная с нуляtempBuffer[65536] будет 65537th байт

.
1 голос
/ 06 июля 2010

Вот небольшой пример, чтобы показать основы. Давайте возьмем меньший массив с четырьмя значениями:

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, в последней - i имеет значение od 3.

wavPanel.addAudioByte(tempBuffer[i]);

Это последнее «волшебство Ява». tempBuffer [i] - это значение i-го слота в массиве, поэтому, если i равно 0, tempBuffer[0] равно 10 (согласно нашей инициализации). И это значение передается методу wavPanel.addAudioByte(byte b).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...