Member 14120682 Ответов: 3

Невозможно применить индексацию с помощью [] к выражению типа 'int' в языке C#


int temp_var;
            int temp_var1;
            int temp_var3;
            int temp_var4;
            int temp_var5;
            int temp_var6;
            int result1;
            int i;
            int j;
            int k;

            temp_var = MCUData[0];
            temp_var1 = MCUData[1];
            temp_var3 = (temp_var & 0xF0) >> 4;
            temp_var4 = (temp_var & 0x0F);

            temp_var5 = (temp_var1 & 0xF0) >> 4;
            temp_var6 = (temp_var1 & 0x0F);

            result1 = ((temp_var3) * 1000) + ((temp_var4) * 100) + ((temp_var5) * 10) + ((temp_var6));
            int f = 0;
            for (i = 0; i <= 29; i++)
            {
                f++;
                if (f == 2)
                {
                    f = 0;
                    i++;
                }

                for (j = 1; j <= 2; j++)
                {

                    for (k = 1; k <= 122; k++)
                    {

                        dataGridView1.Rows[i].Cells[j].Value =result1[k];
                    }
                }
            }


Что я уже пробовал:

я хочу преобразовать результат в результат[]

CPallini

Ваш код использует неудобные пути к простым целям. Каковы, собственно, ваши требования?

3 Ответов

Рейтинг:
5

Richard MacCutchan

for (k = 1; k <= 122; k++)
{

    dataGridView1.Rows[i].Cells[j].Value =result1[k];
}

Эта петля не имеет никакого смысла. Даже если вы измените его, вы постоянно сохраняете значения в одной и той же ячейке вашего datagridview. Таким образом, только последний из них действительно будет там в конце цикла. Также в предыдущем коде вы увеличиваете переменную f пару раз без всякой видимой причины.


Рейтинг:
2

Bryian Tan

Хорошо, я предполагаю, что вы хотите использовать массив int в коде? то int result1; должна быть int[] result1 Может быть, вы хотите, чтобы код создавал массив размером 122? Я также предполагаю, что результат = result1.

int[] result1= new int[((temp_var3) * 1000) + ((temp_var4) * 100) + ((temp_var5) * 10) + ((temp_var6))];


Итак, этот код result1[k] должен работать. Кстати, где находятся коды, которые заполняют result1 массив? Может быть, вы его не отправили?


Рейтинг:
18

Daniele Rota Nodari

Цель вашего кода не очень ясна:
- Индексы i, j, k повторяются до некоторых значений, значение которых неизвестно (29, 2, 122)
- Индекс k итерируется в направлении 122, что никогда не будет допустимым индексом в result1, если только это не массив, но фактическая логика кода не может заполнить его достаточно, даже применяя решение Bryian Tan.
- Есть инструкции, которые извлекают шестнадцатеричные цифры из двух чисел, но позже объединяются вместе, поскольку они не были шестнадцатеричными.
- Позже код пытаются получить доступ по индексу к целому числу.
Вы должны лучше объяснить, что он должен/должен делать.
- Подумайте о замене магических чисел 29 и 122 локальными именованными константами.
- Подумайте о замене я петля и ф переменная с более простым циклом увеличения я по 2 единицы.

int f = 0;
for (i = 0; i <= 29; i++)
{
    f++;
    if (f == 2)
    {
        f = 0;
        i++;
    }

должен был стать
for (i = 0; i <= 29; i += 2)
{


На основе заполнения кода temp_var3, temp_var4, temp_var5 и temp_var6 переменные, я предполагаю, что вы хотите отобразить содержимое Макудата[0] и Макудата[1] в шестнадцатеричной форме.
Тем не менее, значение, присвоенное результат1 это приведет к тому, что эти значения будут перекрываться из-за 10-ти факторов вместо 16-ти.

У меня есть одна гипотеза:
1 - Вы хотите шестнадцатеричное представление Макудата[0] и Макудата[1].
2 - Вы хотите, чтобы остаток от деления результат1 около к.
3 - Вы хотите получить какой-то другой результат, который недоступен только на основе предоставленного кода.

Корпус 1:
Изменить
temp_var3 = (temp_var & 0xF0) >> 4;
temp_var4 = (temp_var & 0x0F);
temp_var5 = (temp_var1 & 0xF0) >> 4;
temp_var6 = (temp_var1 & 0x0F);
result1 = ((temp_var3) * 1000) + ((temp_var4) * 100) + ((temp_var5) * 10) + ((temp_var6));

с
result1 = string.Format("{0:X2}{1:X2}", temp_var, temp_var1);

или
result1 = temp_var.ToString("X2") + temp_var1.ToString("X2");


Случай 2:
Изменить
dataGridView1.Rows[i].Cells[j].Value =result1[k];

к
dataGridView1.Rows[i].Cells[j].Value =result1 % k;