(CS0266,CS0120)我可以绕过它的一个实例来访问它吗?

问题描述 投票:-1回答:2

由于标题中指出的错误,我在编译该程序时遇到了麻烦。我的目标是使该程序输出二次函数的零点。

我曾尝试使用.ElementAt(第14行)来纠正此问题,但我显然试图不当实现它。我不明白为什么我无法访问列表(第25行)。

using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
    int quad(List<double> terms) //takes input from terms list and outputs a list of doubles
    {
        double discriminant = Math.Sqrt(terms[1] * terms[1] - 4 * terms[0] * terms[2]);
        double quad1 = (-terms[1] + discriminant) / 2 * terms[0];
        double quad2 = (-terms[1] - discriminant) / 2 * terms[0];
        double[] quadOutput = new double[] { quad1, quad2 };
        foreach (var term in terms)
        {
            Console.WriteLine(quadOutput[term]); //how is this converting double to int?
        }
        return 0;
    }



    static void Main(string[] args)
    {
        Console.WriteLine("Please enter terms (a,b,c)");
        var userInput = Console.ReadLine();
        List<double> terms = userInput.Split(',') //static?
                             .Select(Convert.ToDouble)
                             .ToList();
        quad(terms);
    }
}

我正在使用mcs在linux(arch64)上进行编译

错误代码:

CS0266:无法隐式转换类型double' to int'。存在显式转换(您是否缺少演员表?)

CS0120:访问非静态成员Program.quad(System.Collections.Generic.List)'需要对象引用。>>

编辑:修复了两个原始问题,但是现在我认为从double到int(对于索引)的转换以某种方式取整?程序编译,但是在运行(给定输入)时,它会给出多个索引超出范围的错误。

using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
    int quad(List<double> terms) //takes input from terms list and outputs a list of doubles
    {
        double discriminant = Math.Sqrt(terms[1] * terms[1] - 4 * terms[0] * terms[2]);
        double quad1 = (-terms[1] + discriminant) / 2 * terms[0];
        double quad2 = (-terms[1] - discriminant) / 2 * terms[0];
        double[] quadOutput = new double[] { quad1, quad2 };
        foreach (var term in terms)
        {
            Console.WriteLine(quadOutput[(Convert.ToInt32(term))]); //how is this converting double to int?
        }
        return 0;
    }



    static void Main(string[] args)
    {
        Console.WriteLine("Please enter terms (a,b,c)");
        var userInput = Console.ReadLine();
        List<double> terms = userInput.Split(',') 
                             .Select(Convert.ToDouble)
                             .ToList();
        Program q = new Program();
        q.quad(terms);
    }
}

由于标题中指出的错误,我在编译该程序时遇到了麻烦。我的目标是使该程序输出二次函数的零点。我尝试使用.ElementAt(第14行)......>

c# mono
2个回答
0
投票

quadOutput是双精度数组条款是双打列表

您正在尝试说“在索引(double)处给我quadOutput”]


0
投票
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
    int quad(List<double> terms) //takes input from terms list and outputs a list of doubles
    {
        double discriminant = Math.Sqrt(terms[1] * terms[1] - 4 * terms[0] * terms[2]);
        double quad1 = (-terms[1] + discriminant) / 2 * terms[0];
        double quad2 = (-terms[1] - discriminant) / 2 * terms[0];
        double[] quadOutput = new double[] { quad1, quad2 };
        foreach (var term in terms)
        {
            Console.WriteLine(quadOutput[(Convert.ToInt32(term))]); //fixes issue of implicit conversion error
        }
        return 0;
    }



    static void Main(string[] args)
    {
        Console.WriteLine("Please enter terms (a,b,c)");
        var userInput = Console.ReadLine();
        List<double> terms = userInput.Split(',') 
                             .Select(Convert.ToDouble)
                             .ToList();
        Program q = new Program(); //fixes issue of static accessibility 
        q.quad(terms);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.