How to exit a non-void method which returns a value? C#Fundamentals
Здравейте,колеги,
Имам един въпрос към вас.
Знаете ли как да излезем от метод, преди той да е изпълнен напълно, защото определено условие не е задоволено. Методът връща стойност и следователно не е от тип "void".
Става въпрос за задача Archery Tournament от Mid Exam 10 Dec 2019. Едната от проверките гласи: . If the start index is out of range of the field Iskren will have to ignore the command.
Та аз правя тази проверка в два отделни метод, в които изчислявам финалният индекс, след движението, съответно на ляво и дясно. Но ако началният индекс ми е извън масива , аз искам да прекъсна този метод и да се върна , там където съм го извикала първоначално т.е. в Main(). Изчетох много материал,но това, което намирам е само за void.
Мъчих се да правя отделен void method,с който просто да прекъсна return method, но voida не ме връща в Main, а в метода, от който искам да изляза.
Качвам си и решението, което е в много суров вид и все още дава 0 точки, но за да илюстрирам какво имам предвид.
Много благодаря!
Дени
using System;
using System.Linq;
namespace _02.Archery_Tournament
{
class Program
{
static void Main(string[] args)
{
int[] arrayTournament = Console.ReadLine().Split('|').Select(int.Parse).ToArray();
string input = null;
while ((input = Console.ReadLine()) != "Game over")
{
//Console.WriteLine(String.Join("|", Reverse(arrayTournament, input)));
Console.WriteLine(ShootLeft(arrayTournament,input));
}
}
private static int ShootLeft(int[] arrayTournament, string input)
{
string[] command = input.Split('@').ToArray();
string direction = command[0];
int startIndex = int.Parse(command[1]);
int lengthOfLeftMove = int.Parse(command[2]);
if (startIndex < 0 || startIndex > arrayTournament.Length - 1)
{
NotValidIndex(arrayTournament, input);
}
else
{
int newIndex = (arrayTournament.Length + startIndex - lengthOfLeftMove) % arrayTournament.Length;
if (newIndex < 0)
{
newIndex = newIndex + arrayTournament.Length;
}
return newIndex;
}
}
private static int ShootRight(int[] arrayTournament, string input)
{
string[] command = input.Split('@').ToArray();
string direction = command[0];
int startIndex = int.Parse(command[1]);
if (startIndex < 0 || startIndex > arrayTournament.Length - 1)
{
NotValidIndex(arrayTournament, input);
}
int lengthOfLeftMove = int.Parse(command[2]);
int newIndex = (startIndex + lengthOfLeftMove) % arrayTournament.Length;
return newIndex;
}
private static void NotValidIndex(int[] arrayTournament, string input)
{
return;
}
private static int[] Reverse(int[] arrayTournament, string input)
{
int[] arrayTournamentReversed = arrayTournament.Reverse().ToArray();
return arrayTournamentReversed;
}
}
}