Loading...
Denislava91 avatar Denislava91 5 Точки

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;
        }
    }
}

 

Тагове:
0
Module: C# Advanced
krum_43 avatar krum_43 756 Точки

Може ли да дадеш линк към условието на задачата?

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.