Софтуерно Инженерство
Loading...
+ Нов въпрос
VesselinTonchev avatar VesselinTonchev 4 Точки

Пренасяне на стойност през методите

Хора, помагайте, че ще си направя лаптопа на парчета, моля ви. Явно правя нещо грешно и не намирам отговор в мрежата. Искам от Main да отида в два други метода, да си направя некви изчисления и да се върна в Main, за да ги изпринтя. Да, ама като отида там, променливите си вземат дефоутните стойности, които съм дифинирал в началотона същия този Main. Ако не ги регистрирам там, не ми дава да ги ползвам в методите. Кодът долу вече и аз не знам какъв е що е. Всякви простотии опитвах. Бесен съм, защото знам, че е елементарно, а ми бяга по тъча.

using System;

namespace Password_Validator
{
    class Program
    {
        static void Main(string[] args)
        {
            string password = "yPas23";
            bool invalidChar = false;
            bool isDigits2OrMore = false;

            LenghtChecker(password);
            DigitsChecker(password, invalidChar, isDigits2OrMore);

            if (invalidChar == false && isDigits2OrMore == true && (password.Length >= 6 || password.Length <= 10))
            {
                Console.WriteLine("Password is valid");
            }
        }
        public static void DigitsChecker(string password, bool invalidChar, bool isDigits2OrMore)
        {
            char[] passwordToArray = new char[password.Length];
            int digitsCounter = 0;
            Console.WriteLine(passwordToArray[1]);
            for (int i = 0; i < password.Length; i++)
            {
                char letter = password[i];

                if (Char.IsDigit(letter))
                {
                    digitsCounter++;                    
                }
                if (letter >= 'a' && letter <= 'z')
                {
                }
                else if (letter >= 'A' && letter <= 'Z')
                {
                }
                else if ((int)letter > 47 && (int)letter < 58)
                {
                }
                else
                {
                    invalidChar = true;
                }
            }
            if (invalidChar)
            {
                Console.WriteLine("Password must consist only of " +
                        "letters and digits");
            }
            Console.WriteLine(digitsCounter < 2 ? "Password must have at " +
                    "least 2 digits" : "");
            if (digitsCounter >= 2)
            {
                isDigits2OrMore = true;
            }
        }
        public static void LenghtChecker(string password)
        {
            if (password.Length < 6 || password.Length > 10)
            {
                Console.WriteLine("Password must be between 6 and 10 characters ");
            }
        }
    }
}

 

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

Това е понеже подаваш аргументи които са value type (не reference type), в случая щом искаш да ги мениш в метода ги подавай по референция, примерно:

public static void LenghtChecker(ref string password) 

съответно викането на метода става:

LenghtChecker(ref password) 
0
17/02/2020 17:47:23
VesselinTonchev avatar VesselinTonchev 4 Точки

Просто няма никаква разлика. Грешката си е същата. Виж тук

https://imgur.com/a/oGkmzDK

0
VesselinTonchev avatar VesselinTonchev 4 Точки

Успях да направя по - лесна задача с рефернции и се получи. Почвам да го разбирам. Благодаря много за насоката :)

1
VesselinTonchev avatar VesselinTonchev 4 Точки
using System;

namespace Password_Validator___V._3
{
    class Program
    {
        static int LenghtChecker(ref string password)
        {
            if (password.Length < 6 || password.Length > 10)
            {
                Console.WriteLine("Password must be between 6 and 10 characters");
            }            

            return password.Length;
        }

        static int DigitsChecker(ref string password, ref int digitsCounter)
        {
            char[] passwordToArray = new char[password.Length];
            digitsCounter = 0;

            for (int i = 0; i < password.Length; i++)
            {
                char letter = password[i];

                if (Char.IsDigit(letter))
                {
                    digitsCounter++;
                }
            }
            if (digitsCounter < 2)
            {
                Console.WriteLine("Password must have at least 2 digits");
            }            

            return digitsCounter;
        }

        static bool ValidCharachters(ref string password, ref bool invalidChar, ref int digitsCounter)
        {
            invalidChar = false;

            for (int i = 0; i < password.Length; i++)
            {
                char letter = password[i];

                if (letter >= 'a' && letter <= 'z')
                {
                }
                else if (letter >= 'A' && letter <= 'Z')
                {
                }
                else if ((int)letter > 47 && (int)letter < 58)
                {
                }
                else
                {
                    invalidChar = true;
                }
            }
            if (invalidChar)
            {
                Console.WriteLine("Password must consist only of letters and digits");
            }
            
            return invalidChar;

        }
        static void Main(string[] args)
        {
            string password = Console.ReadLine();
            int digitsCounter = 0;
            bool invalidChar = false;

            ValidCharachters(ref password, ref invalidChar, ref digitsCounter);
            LenghtChecker(ref password);
            DigitsChecker(ref password, ref digitsCounter);

            if (invalidChar == false && digitsCounter >= 2 &&
                !(password.Length < 6 || password.Length > 10))
            {
                Console.WriteLine("Password is valid");
            }
        }
    }
}

 

0