2013-12-07 4 views
2

Я работаю над назначением для класса, и я получаю бесконечный цикл в моем коде где-то. Я смотрел на него целый день и даже пытался получить помощь от моего профессора (он отсутствовал). Я пробовал отлаживать, но я теряюсь на полпути. Свежий набор глаз был бы очень признателен. Вот мой код, который я могу предоставить при необходимости.Не удается найти бесконечный цикл

while (numRequests != 0 || allocated.size() != 0) { 

     for(int k = 0; k < allocated.size(); k++) { 
      allocated.get(k).decreaseTime(); 
      if (allocated.get(k).equals(0)) { 
       memory.deallocate(allocated.get(k).getId()); 
       startPoint -= allocated.get(k).getSize(); 
       allocated.remove(k); 
       k--; 
      } 
     } 


     for (int i = 0; i < pr.length; i++) { 
      if (pr[i] != null) { 
       String requestSize = pr[i].substring(0, pr[i].indexOf(",")); 
       int rSize = Integer.parseInt(requestSize); 
       String requestTime = pr[i].substring(pr[i].indexOf(",") + 1); 
       int rTime = Integer.parseInt(requestTime); 
       int bSize = 0; 
       if (rSize <= 1024) { 
        bSize = 1024; 
        if (rSize <= 512) { 
         bSize = 512; 
         if (rSize <= 256) { 
          bSize = 256; 
          if (rSize <= 128) { 
           bSize = 128; 
           if (rSize <= 64) { 
            bSize = 64; 
            if (rSize <= 32) { 
             bSize = 32; 
            } 
           } 
          } 
         } 
        } 
        if (bSize <= (1024 - startPoint)) { 
         pr[i] = null; 
         numRequests--; 
         allocatedMemory am = new allocatedMemory(i+1, bSize, rTime); 
         allocated.add(am); 
         memory.allocate(i+1, rTime, startPoint, bSize); 
         startPoint += bSize; 
        } 
       } 
       else { 
        break; 
       } 
      } 
     } 
    } 

Я не прошу помочь выполнить поручение. Я чувствую, что мне нужно сделать это сам. Я просто застрял здесь по какой-то причине и мог использовать толчок в правильном направлении. Большое спасибо.

+0

Язык? Похоже, это может быть Java или C/C++. – GreenMatt

+0

Вы уверены, что вам нужно ИЛИ в тех условиях? – Shomz

+0

@ GreenMatt это java – user2084037

ответ

1

Вы должны либо использовать AND (& &) в вашем состоянии во время части, или изменить его на что-то вроде

while (numRequests > 0 || allocated.size() > 0) { 

это нарушит цикл после того, как они оба упасть до нуля или ниже.

Ваше исходное состояние будет ломаться, только если они ОБА равны нулю на итерации (что может или не может произойти).

+0

Хорошее предложение Я пошел и изменил это, но это не решило проблему. – user2084037

+0

Почему после каждой итерации вы не делаете отладки и печати? Сделайте простой тестовый пример и используйте 'for' вместо' while'. – Shomz

+0

Хорошо, я могу попробовать. Я ценю помощь. – user2084037

Смежные вопросы