Как продолжить цикл, если выполнение идет внутри(неправильно)

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2015

Имеется метод,

    int size = 0;
    int[] Name= new int[size];
    String contName;
    int[] unkSize = new int[5];
    String unkName;
in.seek(NameOffset); //NameOffset==64
for(int j=0;j<3;j++)
{   
    for(int i=0;i<1;i++) {
        size = (int)in.read();
    }

    for(int i=0;i<size;i++) {
        Name[i]= (int)in.read();
        contName+=(char)Name[i];
    }

    for(int i=0;i<5;i++) {
        unkSize [i]=(int)in.read();
        unkName += (int)unkSize [i];
    }
}

который использует 3 цикла, для чтения данных - определенным образом,выглядит он следующим образом:

  1. 1 Loop, читает интовое значение - равное от 0 до 1, и записывает его в буфер-переменную.
  2. 2 Loop, читает от 0 до значения равного - из переменной(loop1) и присваивает результат в Буфер-переменную(2).
  3. 3 Loop, читает int от 0 до 5, и присваивает значение в переменную(3). Таким образом, если в начале чтения FilePointer, указывал - на позицию 64(внутри файла), то после этих 3ех циклов, позиция стала равна 74,

И вся проблема заключается в том что если обернуть эти 3 цикла - еще одним, то метод не перейдет на 75 строку, и не начнет снова выполнять эти 3 цикла, но с переходом, а вместо этого они будут выполняют себя внутри, то есть просчитывая снова size, который будет вместо 5, равен 6(на позиции 65), и так до - того значения которое указано в основном Loop'e. А мне нужно чтобы этот метод прошел c 64 по 74, проделав работу,и перешел уже на 75-85++,и проделал там работу, а не выполнял цикл внутри себя.

Возможно ли это решить - добавив, boolean переменную, которая бы указывала true, для циклов, после чего они переходили далее, если да то как именно это следует сделать, и если это бред то что можно сделать - не сильно портя код!

Ответы

▲ 3Принят

Давайте править по частям, возможно, придём к верному ответу.

Во-первых, size не является константой, поэтому выделять массив размером в size заранее не имеет смысла. Получаем такой кусок:

int size = in.read();
int[] Name = new int[size];

for (int i = 0; i < size; i++) {
    Name[i] = (int)in.read();
    contName += (char)Name[i];
}

Далее, исходя из комментария, размер нужно уменьшить на 1. Уточнённый код:

int size = in.read() - 1;
int[] Name = new int[size];
String contName = "";

for (int i = 0; i < size; i++) {
    Name[i] = (int)in.read();
    contName += (char)Name[i];
}

Окей, дальше идёт 5 байт, которые вроде бы одинаковые всегда. То есть, их можно скипнуть. Так и делаем. Заодно оборачиваем в цикл:

in.seek(NameOffset); //NameOffset==64

for (int j = 0; j < 3; j++) {

    int size = in.read() - 1;
    int[] Name = new int[size]; // а нужен ли этот массив?
    String contName = "";

    for (int i = 0; i < size; i++) {
        Name[i] = (int)in.read();
        contName += (char)Name[i];
    }

    in.skip(5); // когда заработает, не забудьте
                // добавить проверку на конец данных
}

Непонятно, что делать с прочитанными данными. Но тут уж ТС разберётся сам.