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;
}
}
}
kkaraivanov, много благодаря за отговора.
Аз, обаче, искам да изляза от метода с тази проверка:
С break не става.
Хвърля ми този коментар: No enclosing loop from which to break or continue.
Дори да не е в контекста на задачата, как мога да "break-на" метод, който връща стойност.
Благодаря!
Метода се брейква и като резултат от него задължително трябва да ретърнеш някаква стойност - като идея сложи една булева променлива "bool isYourConditionsatisfied = false" и да кажем ако върнеш например "-1" това да е знак, че проверката не е минала, ако върнеш положително число - всичко е ок... не съм гледал условието на задачата, но ако метода не е воид винаги трябва да върне нещо, сам си прецини какво дали булева стойност или инт...ако е инт дадох ти един вариант как да го използваш...успех
Проверката
си я изпълняваш по логиката която следваш и би трябвало да изглежда
след изпълнение на тази проверка, метода ще върне стойността на новия индекс и няма да се изпълнява по-надолу втялото си.