[Homework] Console Input / Output *Fibonacci Numbers
Ето решение, успях да пресъздада алгоритъма в C#:
using System;
namespace FibonacciNumbers
{
class FibonacciNumbers
{
static void Main()
{
uint firstMembers = uint.Parse(Console.ReadLine());
int[] fibonacci = new int[firstMembers];
fibonacci[0] = 0;
fibonacci[1] = 1;
for (int i = 2; i < firstMembers; i++)
{
fibonacci[i] = fibonacci[i-2] + fibonacci[i-1];
}
for (int i = 0; i < firstMembers; i++)
{
Console.Write("{0} ", fibonacci[i]);
}
}
}
}
Netherblood - вторият цикъл за каво е ?
Направих задачата с нормален цикъл. След това пробвах и метода с масиви, но без вторият цикъл, но ми хвърля ексепшън след 3-тото завъртане.
int lenght = int.Parse(Console.ReadLine());
int[] numbers = new int[lenght];
numbers [0] = 0;
numbers [1] = 1;
for (int i = 2; i <= 10; i++)
{
numbers[i] = numbers[i - 2] + numbers[i - 1];
}
После принтирам, работи, но излиза от range...
Ако установим позиция [0] = 0 и [1] = 1; като пуснем цикъла от две, не трябва ли да стане следното ;
първо завъртане ; number [2] = number [2-2] + number [2-1] = презаписваме позиция 2 и принтираме
второ завъртане - number [3] = number [3-2] + number [3-1] = позиция 3 и принтираме.
След третото записване има ексепшън. Ако може да помогнете откъде идва.
Мерси
Въведеният ти length по всяка вероятност е по-малък отколкото трябва, големината на масива после зависи от него и на въпросното трето извъртане се опитва да достъпи елемент с несъществуващ индекс.
Мерси за отговора. Странното е , че пробвах с много различни дължини, но винаги след 3-то завъртане е ексепшъна... дебъгвах го, чудих се...
Надявам се, някой да вижда нещо различно.
Имаш масив с дължина length, а си хардкоднал цикъла до 10. Цикълът трябва да се върти до length и то не включително (< length, a не <= length). Пробвай така и би трябвало да работи нормално.
Мерси Тонислав, хардкодването беше един от многото опити да видя къде бъркам, и съм го пейстнал него грешно.
Проблемът беше в <= :) - давам дължина примерно 5, задавам позиция 0 и позиция 1, и имам само още 3! като сложа <= цикъла върти 4 пъти и логично излиза от обхват!
беше супер елементарно, но не го видях. Помогна ми !
Радвам се, че съм ти бил полезен. Когато обхождаш индексирани колекции (масив, списък), както и стрингове, никога не включваш и дължината. Демек винаги < length/count, защото както знаеш в програмирането броим от 0, така че ако дължината е N, последният индекс е N-1. Когато видиш IndexOutOfRange, винаги си проверявай да не би някъде да си забравил някое '=' или пък ако индексът ти се изчислява по някакъв начин, да не би този индекс да стане отрицателен или >= на дължината. Често срещана грешка, ще свикнеш да си я хващаш :)
Поздрави,
Тони