C#如何将每个操作结果的数组写为新数组

问题描述 投票:0回答:1

[试图处理数组浮点数据,并将其保留为新数组以备后用。得到了10个项目的float [],并希望对每个项目进行数学运算并将结果保存到新数组中。出现“无法将浮点数转换为浮点数”错误。感谢您的帮助,如果在dup上找不到即时通讯在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和注释中共享的代码,但仍然有错误:

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));
        var icant = sbf.Select(i => Math.Sqrt(i)).ToArray() // icant is an arry here
        sbf.ForEach(i => Console.WriteLine(i * 2));
    }
c# arrays
1个回答
0
投票

问题出在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);
}
© www.soinside.com 2019 - 2024. All rights reserved.