C#编程数组

C#编程数组,c#,C#,我正在写一个程序,把家庭作业的分数放在一个数组中,然后取平均值。但我需要让这些分数在1-10之间。我不知道如何使它只接受数字1-10。其他一切都完成了 以下是我到目前为止的情况: namespace AverageScore { class AverageScore { //prompt user to enter the size of the array public int GetNum() { Console.WriteLine("Please

我正在写一个程序,把家庭作业的分数放在一个数组中,然后取平均值。但我需要让这些分数在1-10之间。我不知道如何使它只接受数字1-10。其他一切都完成了

以下是我到目前为止的情况:

namespace AverageScore
{
class AverageScore
{
    //prompt user to enter the size of the array 
    public int GetNum()
    {
        Console.WriteLine("Please enter how many scores you want to save!");
        string strNum = Console.ReadLine();
        int num = int.Parse(strNum);
        return num;
    }

    static void Main(string[] args)
    {
        AverageScore scoreObject = new AverageScore();
        int arraySize = scoreObject.GetNum();

        //define a double array to save scores
        double[] scoreArray = new double[arraySize];

        string inValue = "";
        double sum = 0,
            intValue;


        Console.WriteLine("Please enter all homework scores");
        int counter = 0;
        while (counter < arraySize)
        {

            inValue = Console.ReadLine();
            while (double.TryParse(inValue, out intValue) == false)
            {
              Console.WriteLine("Invalid input = 0 stored in intValue");
              inValue = Console.ReadLine();
            }
            sum += intValue;
            scoreArray[counter] = intValue;
            counter++;

        }

        Array.Sort(scoreArray);
        double lowest= scoreArray[0];
        double highest = scoreArray[arraySize-1];
        sum = sum - lowest - highest;
        double average = sum / arraySize;
        Console.WriteLine("The average grade of the scores is" + average);
        Console.WriteLine("The Lowest Score is" + lowest);
        Console.WriteLine("The Highest Score is" + highest);
        Console.Read();
    }

}
namespace AverageScore
{
班级平均分
{
//提示用户输入阵列的大小
公共int GetNum()
{
Console.WriteLine(“请输入您要保存的分数!”);
字符串strNum=Console.ReadLine();
int num=int.Parse(strNum);
返回num;
}
静态void Main(字符串[]参数)
{
AverageScore scoreObject=新的AverageScore();
int arraySize=scoreObject.GetNum();
//定义双数组以保存分数
double[]scoreArray=新的double[arraySize];
字符串无效=”;
双和=0,
内在价值;
Console.WriteLine(“请输入所有家庭作业分数”);
int计数器=0;
while(计数器

}

那么您的问题是将输入限制为1-10正确吗

为什么不只是:

public int InputGrade()
{
    Console.Clear();

    Console.WriteLine("Please enter a grade [1-10]");
    var grade = -1;
    if (!Int32.TryParse(Console.ReadLine(), out grade))
        return InputGrade();
    if (grade < 1 || grade > 10)
        return InputGrade();

    return grade;
}
public int InputGrade()
{
Console.Clear();
Console.WriteLine(“请输入[1-10]级”);
var等级=-1;
如果(!Int32.TryParse(Console.ReadLine(),out grade))
返回InputGrade();
如果(等级<1 | |等级>10)
返回InputGrade();
返回等级;
}
然后您应该能够像这样使用它,而且它更干净:

while (counter < arraySize)
{
    var grade = InputGrade();
    sum += grade;
    scoreArray[counter++] = grade;
}
while(计数器
推荐 事实上,您应该重构计算部分的输入-您的代码将变得更清晰、更可读:

IEnumberable<int> InputGrades()
{
    var count = GetNum();
    var grades = new List<int>();
    for (var i = 0; i < count; i++)
       grades.Add(InputGrade());
    return grades;
}

void OutputScores(IEnumerable<int> grades)
{
    var scores  = grades.Cast<doulbe>().ToArray();
    var lowest  = scores.Min();
    var highest = scores.Max();
    var average = scores.Average();
    Console.WriteLine("The average grade of the scores is" + average);
    Console.WriteLine("The Lowest Score is" + lowest);
    Console.WriteLine("The Highest Score is" + highest);
}
IEnumberable InputGrades()
{
var count=GetNum();
var等级=新列表();
对于(变量i=0;i
调整while循环条件以检查数字是否在范围内(添加了一个简单的字符串格式以显示先前的无效条目):

while(double.TryParse(inValue,out intValue)==false | | intValue<1.0 | | intValue>10.0**)
{
WriteLine(String.Format(“无效输入={0}存储在intValue中”,intValue));
inValue=Console.ReadLine();
}
这应该可以做到:

while (counter < arraySize){
    inValue = Console.ReadLine();
    while (true){
        if(double.TryParse(inValue ,out intValue) {
            if(intValue >=1 && intValue <=10){
                break;
            }else{                      
                Console.WriteLine("Input must be in the range 1-10");
                inValue = Console.ReadLine();
            }
        }else{
            Console.WriteLine("Invalid input = 0 stored in intValue");
            inValue = Console.ReadLine();
        }
    }
    sum += intValue;
    scoreArray[counter] = intValue;
    counter++;
}
while(计数器如果(intValue>=1&&intValue使用循环检查输入的值是否正确:

while (int.Parse(inValue) < 1 || int.Parse(inValue) > 10)  inValue = Console.ReadLine();
while(int.Parse(inValue)<1 | | int.Parse(inValue)>10)inValue=Console.ReadLine();

与函数式编程的连接在哪里?您已经解决了无效输入问题,尽管
“…=0”
part有点误导。现在用同样的方法解决
intvar<1 | | intvar>10
问题。我需要程序能够只输入1-10个数字,但能够输入尽可能多的数字。当然,只要对你需要的每一个等级使用这个函数……我只是重构了代码,让事情看起来更干净-你当然可以使用这是一个循环或任何你想要的wish@HenkHolterman如果你作弊,那就做对吧——不管怎么说,我没有责任决定什么可能是明显的帮助——我有责任给出合理的建议,递归是这种情况下最明显、最简单的解决方案——顺便说一句:OP首先添加了函数式编程标签;)当我运行这个时,我得到了“输入必须在1-10范围内”在控制台下运行。WriteLine(“输入必须在1-10范围内”);
您必须添加:
inValue=Console.ReadLine();
介意吗?
while (int.Parse(inValue) < 1 || int.Parse(inValue) > 10)  inValue = Console.ReadLine();