Methods looping
Здравейте :),
Всичко се счупи, след като добавих метод, който да валидира, че индексите, с които ще се работи, не са out of range. Уж всичко точно, но като вкарам "End", за да изляза, ме прехвърля в IndexValidator и вътре директно отива в CommandChecker, а после в метода, който е в един от case -вете на switch - Remove???!?!?@?? Страшен мазаляк се получи и не разбирам защо. Ако го махна тоя метод за валидиране и си го хардкодна в двата случая, които ме интересуват, всичко си работи, но има повтаряем код.
using System;
using System.Collections.Generic;
using System.Linq;
namespace List_Exercise___Vol_5
{
class Program
{ static void Main(string[] args)
{
List<string> numbers = Console.ReadLine().Split().ToList();
CommandChecker(numbers);
Console.WriteLine(string.Join(" ", numbers));
}
static void CommandChecker(List<string> numbers)
{
List<string> command = Console.ReadLine().Split().ToList();
while(command[0] != "End")
{
switch (command[0])
{
case "Add":
Add(numbers, command);
break;
case "Insert":
int temp = Convert.ToInt32(command[2]);
IndexValidator(numbers, command, ref temp);
Insert(numbers, command);
break;
case "Remove":
temp = Convert.ToInt32(command[1]);
IndexValidator(numbers, command, ref temp);
Remove(numbers, command);
break;
case "Shift":
if (command[1] == "left")
{
ShiftLeft(numbers, command);
}
else
{
ShiftRight(numbers, command);
}
break;
}
command = Console.ReadLine().Split().ToList();
}
}
static void IndexValidator(List<string> numbers, List<string> command, ref int temp)
{
if (temp > numbers.Count || temp < 0)
{
Console.WriteLine("Invalid index");
CommandChecker(numbers);
}
}
static void Add(List<string> numbers, List<string> command)
{
numbers.Add(command[1]);
}
static void Insert(List<string> numbers, List<string> command)
{
int temp = Convert.ToInt32(command[2]);
numbers.Insert(temp, command[1]);
}
static void Remove(List<string> numbers, List<string> command)
{
int temp = Convert.ToInt32(command[1]);
numbers.RemoveAt(temp);
}
static void ShiftLeft(List<string> numbers, List<string> command)
{
int count = Convert.ToInt32(command[2]);
while (count > 0)
{
numbers.Add(numbers[0]);
numbers.RemoveAt(0);
count--;
}
}
static void ShiftRight(List<string> numbers, List<string> command)
{
int count = Convert.ToInt32(command[2]);
while (count > 0)
{
numbers.Insert(0, numbers[numbers.Count - 1]);
numbers.RemoveAt(numbers.Count - 1);
count--;
}
}
}
}