Защо дава грешка?


1
Здравейте!
Защо, когато променливата: a е от тип long VS ми подчертава като грешка
matrix[i, j] = massive[a];
а когато е int не?
long a = 0;
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                matrix[i, j] = massive[a];
                a++;
            }
        }



Отговори



0
Здравей, защото във for цикъла задаваш i и j да са от тип int, съответно трябва да са ти към long тип, или да кастнеш след това към този тип крайния резултат.

от tsonko_genov (708 точки)


2
Здраей и от мен. Проблема не е в i и j, просто масивите приемат като индекс само числа от тип int. Така че помисли дали ти е наложително да използваш long или може да минеш и с int, ако наистина ти е наложително да го използваш направи както ти е предложил колегата, а именно кастни лонга към int. Въпреки, че ме съмнява да да ти е нужно число от тип long за индекс на масив, защото ако наистина ще правиш толкова итерации във for цикъла, че да прехвърлиш максималната стойност на int значи нещо ти куца в уравнението и по-добре да го премислиш наново.

от stefan86 (15 точки)


0

 Правиш a++; на (int)a++; и трябва да работи.


от ivan.mihov1 (4988 точки)


0
Само леко уточнение, че при колегата става дума за списък - List

от vassilpk (20 точки)


0
Здравей, колегите по-горе са ти дали варианти, с които да ти работи кода.
Аз бих обяснил протестите на вижуъл студио така:
във форциклите задаваш интове и искаш променлива от тип инт да приеме стойността на лонг. Лонгът обаче е 'по-голям' от инта,т.е. искаш нещо 'голямо по дефолт' да се събира в нещо 'по-малко по дефолт' , затова в такива случаи се налага т.нар. typecast. Виж го в лекциите и презентациите, много добре е обяснено, а и ще ти е нужно да го разбереш занататък.
Успех!

от AVelev (455 точки)