Как записать массив для каждого результата операции как новый массив - PullRequest
0 голосов
/ 29 мая 2020

Попытка обработать данные Array с плавающей запятой и сохранить их как новый массив для дальнейшего использования. Получил float [] из 10 элементов и хочу провести математические вычисления с каждым элементом и сохранить результат в новом массиве. Получение ошибки «не могу преобразовать число с плавающей точкой в ​​число с плавающей точкой». Спасибо за помощь, не могу найти то, что искал в Google, извините, если это дубли.

public static void Main(string[] args)
{
    Console.WriteLine("Proyecto X0n-832, Codificación de la teoría musical.");
    //Variables Generales
    float[] eau = { 440, 20000 };
    float fnd = eau[0];
    float cyc = fnd * 2;
    //Se cambia sfn por sbf    
    float[] sbf = { fnd, cyc, cyc * 2, cyc * 4, cyc * 8, cyc * 16, cyc * 32, cyc * 64, cyc * 128, cyc * 256 };

    //Imprimir la información hasta ahora:
    Console.WriteLine("Rango audible definido entre " + eau[0] + " y " + eau[1] + " Hz");
    Console.WriteLine("Frecuencia fundamental: " + fnd);
    Console.WriteLine("Lista de ciclos (octavas): ");
    // Console.WriteLine(string.Join("\n", sbf));
    foreach (float i in sbf)
    {
        float[] icant = Math.Sqrt(i);
        Console.WriteLine(i*2);
    }
}

// Редактировать: добавлен Linq и код, опубликованный в комментариях, но все еще есть ошибки: *

1 Ответ

0 голосов
/ 29 мая 2020

Проблема в вашем блоке foreach. Тип вывода Math.Sqrt(i) не float[], это float.
Я предполагаю, что вы хотите:

var icant = sbf.Select(i => Math.Sqrt(i)).ToArray(); // icant is an arry here
Array.ForEach(sbf, i => Console.WriteLine(i));

Я только что использовал методы расширения linq для выполнения работы. Если вам это не нравится:

var result = new float[sbf.Length];
for( var i = 0; i < sbf.Length; i++) 
{
    result[i] = Math.Sqrt(sbf[i]);
    Console.WriteLine(i*2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...