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--;
}
}
}
}
Ами, защото съм тъпак и забравих. И пак не би трябвало да се държи така. Свършва си switch-a и трябва да си приключи. То на същия принцип може да ми залупи и при другите методи
1.List Operations
You will be given a list of integer numbers on the first line of input. You will be receiving operations you have to apply on the list until you receive the "End" command. The possible commands are:
Note: there is a possibility that the given index is outside of the bounds of the array. In that case print "Invalid index"
Examples
Input
Output
1 23 29 18 43 21 20
Add 5
Remove 5
Shift left 3
Shift left 1
End
43 20 5 1 23 29 18
5 12 42 95 32 1
Insert 3 0
Remove 10
Insert 8 6
Shift right 1
Shift left 2
End
Invalid index
5 12 42 95 32 8 1 3
ПРобвай този код който направих по задачата