ワンステップづつ確認してみて何処でおかしくなるかのデバックの仕方を覚えた方が良いですよ。 何処まで期待通りか、何処から期待外れとなるかの問題の切り分けは重要です。 プログラムとしては正しく動いている様です。