2015-03-22 3 views
0

Я пытаюсь написать булев метод, но он не работаетBoolean метод не проверяет, если Постулаты

public boolean addPresent(Present present) 
    { 
     if(totWeight+present.getWeight()<=maxWeight) 
     { 
      presents.add(present); 
      presents1.add(present); 
      return true; 

     } 
      for(Present pres : presents1) 
      { 
      totWeight+=pres.getWeight(); 
      }return false; 
    } 

Это работает, если я пишу этот метод:

public void addPresent(Present present) 
    { 
     if(totWeight+present.getWeight()<=maxWeight) 
     { 
      presents.add(present); 
      presents1.add(present); 
     System.out.println("true"); 

     }else 
     {    System.out.println("false"); 
     } 
      for(Present pres : presents1) 
      { 
      totWeight+=pres.getWeight(); 
      } 
} 

Как я должен сделать boolean метод для этого?

+4

Как это не работает? –

+0

Какая ошибка вы получаете? Также попробуйте использовать Boolean. – avk

+2

Не пытайтесь использовать Boolean. – FINDarkside

ответ

0

Вы должны возвратить ложь перед циклом, или включать в себя цикл внутри состояния, когда вы проверить, что вес будет меньше, чем maxWeight. Или вы можете просто добавить вес настоящего в totWeight, не нужно для цикла.

public boolean addPresent(Present present){ 

    if(totWeight+present.getWeight()<=maxWeight){ 
     presents.add(present); 
     presents1.add(present); 
     totWeight += present.getWeight(); 
     return true; 
    } 
    return false; 
} 
+0

спасибо за быстрый ответ :) – krychuq

0

Основное отличие Я отмечаю, что он ничего не добавляет к totWeight, когда вы return true. Я также думаю, что вы хотите сбросить total с чем-то вроде

public boolean addPresent(Present present) { 
    boolean r = false; 
    if (totWeight + present.getWeight() <= maxWeight) { 
     presents.add(present); 
     presents1.add(present); 
     r = true; 
    } 
    totWeight = 0; // <-- reset total. 
    for (Present pres : presents1) { 
     totWeight += pres.getWeight(); 
    } 
    return r; 
} 
+0

спасибо за быстрый ответ – krychuq

0

После очистки форматирования и сравнения двух описанных вами методов я заметил одну большую логическую ошибку.

В первом методе, вы выполните следующие действия:

если это правда, возвращает истину и остановить выполнение остальной части метода. - если ложно, добавьте все существующие веса и вернуть ложные

Во втором методе, вы делаете следующее:

если это правда, возвращает истину и продолжать работать остальную часть метода. - если false, добавьте все текущие веса и верните false

Если первый способ - это то, как вы хотите это сделать, объявите логическое начало в начале метода и установите его в true или false в зависимости от результата test и возвращать значение boolean. Таким образом, вы удерживаете фактический оператор возврата, пока не закончите вычисление.

public boolean addPresent(Present present) 
{ 
    boolean temp = false; 
    if(totWeight+present.getWeight()<=maxWeight) 
    { 
     presents.add(present); 
     presents1.add(present); 
     temp = true; 
    } 
    for(Present pres : presents1) 
    { 
     totWeight+=pres.getWeight(); 
    } 
    return temp; 

}

+0

Как сказал @Elliott Frisch, вы, скорее всего, захотите сбросить значение totWeight до 0 перед повторением цикла, но мы можем ошибаться. Если 2-й метод, который вы указали, делает то, что вы хотите, но просто не возвращает значение, а затем перейдите с помощью вышеописанного метода. – Zaanzabar

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