2016-05-08 3 views
2

Я очень новичок в Java, извините, если вопрос слишком прост. Я пытаюсь оценить, является ли массив частью последовательности фибоначчи. Я не знаю, как вернуть «истинное» значение, когда цикл «for» не прерывается. Есть идеи? Заранее спасибо! Это то, что я имею сейчас:for-loop Возвращаемое значение Java

public boolean checkFibb(ArrayList<Integer> array1) { 
    int i; 
    int fibb; 

    if (array1.size() < 3) { 
     System.out.println("Your array is too short!"); 
    } else { 
     for (i = 0; i <= array1.size() - 2; i++) { 
      fibb = array1.get(i + 2) - (array1.get(i + 1) + array1.get(i)); 

      if (fibb != 0) { 
       System.out.println("Elements are not part of the Fibonacci sequence."); 
       break; 
      } else { 
       System.out.println("Elements are part of the Fibonacci sequence."); 
      } 
     } 
    } 

    return true; 
} 
+5

вместо 'перерыва;' внутри цикла, не 'возвращает ложь,' –

ответ

3

Вы всегда возвращают true из метода. Вы должны сделать что-то следующим образом:

public boolean checkFibb(ArrayList<Integer> array1) { 
    int i; 
    int fibb; 
    boolean isFibb = true; 

    if (array1.size() < 3) { 
     System.out.println("Your array is too short!"); 
     isFibb = false; 
    } else { 
     for (i = 0; i <= array1.size() - 2; i++) { 
      fibb = array1.get(i + 2) - (array1.get(i + 1) + array1.get(i)); 

      if (fibb != 0) { 
       System.out.println("Elements are not part of the Fibonacci sequence."); 
       isFibb = false; 
       break; 
      } else { 
       System.out.println("Elements are part of the Fibonacci sequence."); 
      } 
     } 
    } 
    return isFibb; 
} 
2

Что вы делаете в вашем коде вы нарушаете текущую итерацию цикла, когда вы обнаружили, что элементы не являются частью последовательности Фибоначчи. break останавливает текущую итерацию цикла, в котором вы находитесь. То, что вы хотите сделать, это return false от функции на этом этапе. Когда вы обнаруживаете, что массив действительно является фибоначчивой последовательностью, вы должны были бы return true на этом этапе.

Если вы массив слишком короткий, это не может быть последовательность фибоначчи, таким образом, вы должны были бы return false на этом этапе.

public boolean checkFibb(ArrayList<Integer> array1) { 
int i; 
int fibb; 

if (array1.size() < 3) { 
    System.out.println("Your array is too short!"); 
    return false; 
} else { 
    for (i = 0; i <= array1.size() - 2; i++) { 
     fibb = array1.get(i + 2) - (array1.get(i + 1) + array1.get(i)); 

     if (fibb != 0) { 
      System.out.println("Elements are not part of the Fibonacci sequence."); 
      return false; 
     } else { 
      System.out.println("Elements are part of the Fibonacci sequence."); 
      return true; 
     } 
    } 
} 

}

+0

Спасибо за ваш ответ! однако что-то все еще кажется неправильным. Я редактирую свой код в Eclipse, и он показывает, что i ++ часть моего цикла for - это «мертвый код». Более того, код работает неправильно, а массив [2, 4, 6, 10, 15, 26] возвращает истинное значение, хотя 10 + 15 не равно 26. Как это могло быть? И еще один вопрос: мне не нужно какое-то возвращаемое значение для моей функции checkFibb? –

+0

Да, я не полностью исправил код, я просто показывал способ использования операторов return. Тип возврата действительно является логическим. Вам нужно будет добавить еще один оператор возврата в нижней части функции, чтобы компилятор был счастлив. :) –

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