由于标题中指出的错误,我在编译该程序时遇到了麻烦。我的目标是使该程序输出二次函数的零点。
我曾尝试使用.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行)......>
quadOutput是双精度数组条款是双打列表
您正在尝试说“在索引(double)处给我quadOutput”]
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);
}
}