03. Compare char arrays, 80/100 - 2x (Грешка по време на изпълнение). Идеи?


0
using System;
using System.Linq;
class Program
{
    static void Main()
    {
        char[] firstCharArray = Console.ReadLine().ToCharArray();
        char[] secondCharArray = Console.ReadLine().ToCharArray();

        int biggerArray = 0;

        if (firstCharArray.Length <= secondCharArray.Length)
        {
            biggerArray = secondCharArray.Length;
        }
        else
        {
            biggerArray = firstCharArray.Length;
        }

        for (int i = 0; i < biggerArray; i++)
        {
            if (firstCharArray[i] < secondCharArray[i])
            {
                Console.WriteLine("<");
                break;
            }
            else if (firstCharArray[i] > secondCharArray[i])
            {
                Console.WriteLine(">");
                break;
            }
            else if (firstCharArray.SequenceEqual(secondCharArray))
            {
                Console.WriteLine("=");
                break;
            }
        }
    }
}



Отговори



0

Грешката идва от тук

for (int i = 0; i < biggerArray; i++)

Въртиш цикъла до дължината на по-големия масив. Като сравняваш после елементите, искаш да достъпиш индекс, който не съществува в по-малкия масив.

За да можем по-лесно да ти помогнем, друг път пиши каква точно е грешката. Предполагам, че сега ти изписва IndexOutOfRange или нещо подобно.


от vasilv (275 точки)


0
Нямам грешка в кода, върви си нормално.

от dreadlocker (22 точки)

0

Пробвай да сравниш тогава тези думи с твоя код:

ааа
аааааа


от vasilv (275 точки)


0

Здравей колега,

Доста се чудех дали да драсна няколко реда(за да не се сметне за заяждане), но все пак може пък да е полезно(въпреки че не е точно по въпроса ти).

За да прецениш дали твоите 2 масива са еднакви ползваш вградената функция SequenceEqual, но реално тя превърта още веднъж 2-та масива за да ти върне true или false. Ако имаш 2 много дълги масива на които само последния символ се различава реално програмата може доста да ти се забави доста.

Мисля че би било по-добре да си измислиш своя логика, нещо подобно.

- в for цикъла проверяваме дали по-малкия масив се побира целия в по-големия

            string check = "=";
            for (int i = 0; i < lenghtCheck; i++)
            {
                if (str1[i] != str2[i])
                {
                    if (str1[i] < str2[i])
                    {
                        check = "<";
                    }
                    else
                    {
                        check = ">";
                    }
                    break;
                }
            }

- след което проверяваме дължината на 2-та за да вземем крайно решение

switch (check)
            {
                case "=":
                    if (str1Length == str2Length)
                    {
                        Console.WriteLine(check);
                    }
                    else if (str1Length < str2Length)
                    {
                        Console.WriteLine("<");
                    }
                    else
                    {
                        Console.WriteLine(">");
                    }
                    break;
                default:
                    Console.WriteLine(check);
                    break;
            }


от ktsvetanov (705 точки)