使用UserOption枚举创建双值的列表

时间:2018-05-06 11:59:46

标签: c#

我查看了档案,没有找到能够帮助我理解我正在解决的问题的任何内容。这很可能非常容易,但我发现构建程序的结构组件难以理解。我认为这是使用方法然后将这些方法的结果调用到Main的概念。

我需要创建一个值列表,用户可以添加,总和(+打印结果)和打印(输入值) - 他们通过枚举选择它。当用户希望使用上述任何选项时,程序运行,因此需要循环。

这是我到目前为止所做的 - 没有错误,但代码中也没有“连接”。我的enum工作,这就是它。我不确定如何“调用”NewValue,Sum和Print方法。非常感谢任何帮助。

更新 - 我刚刚回顾了一些关于我更新的代码的评论,并且在解决问题时我没有意识到正确的协议是什么。我现在更新了我认为对我的问题的最佳回答。

using System;
using System.Collections.Generic;
using SplashKitSDK;

public class Program    
{
    public static void Main()
    {
        UserOption userSelection;

        do
        {
            userSelection = ReadUserOption();

            switch (userSelection)
            {
                case UserOption.NewValue:
                    //NewValue (_values);
                    break;
                case UserOption.Sum:
                    //Sum ();
                    break;
                case UserOption.Print:
                    //Print ();
                    break;
                case UserOption.Quit:
                    Console.WriteLine("Quit");
                    break;
            }
        }
        while (userSelection != UserOption.Quit);
    }

    public static UserOption ReadUserOption()
    {
        Console.WriteLine("Enter 0 to add a value");
        Console.WriteLine("Enter 1 to add a sum all values");
        Console.WriteLine("Enter 2 to print a sum all values");
        Console.WriteLine("Enter 3 to quit");

        int option = 3;
        Int32.TryParse(Console.ReadLine(), out option);

        return (UserOption) option;
    }

    public static int ReadInteger(string prompt)
    {
        Console.Write(prompt);
        while (true)
        {
            try
            {
                return Int32.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("please enter a valid integer");
            }
        }
    }

    public static int ReadDouble(string prompt)
    {
        Console.Write(prompt);
        while (true)
        {
            try
            {
                return Int32.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine("please enter a valid double");
            }
        }
    }

    public enum UserOption
    {
        NewValue, Sum, Print, Quit
    }
}

public class List
{
    private static List<double> _values = new List<double>();

    public int Size
    {
        get
        {
            return _values.Count;
        }
    }

    public static void NewValue (double value)
    {
        Console.WriteLine("Please enter a value");
        value = Convert.ToDouble(Console.ReadLine());
        _values.Add(value);
    }

    public static void Print()
    {
        foreach (double value in _values)
        {
            Console.WriteLine(value);
        }
    }

    public static void Sum()
    {
        double sum = 0;

        foreach (double value in _values)
        {
            sum = sum + (value);
        }

        Console.WriteLine($"Sum of all elements in the list is {sum}");
    }   
}

2 个答案:

答案 0 :(得分:1)

这对我来说还不够清楚,但只要让你的代码表明你的意图是有效的,就没有太多可做的了。

1 - 我没有看到需要ReadInteger和ReadDouble方法。

2 - 我已经从value方法移除了NewValue参数,一旦它已经在读取之前添加。

public static void NewValue ()
{
    double val = 0;
    Console.WriteLine("Please enter a value");
    val = Convert.ToDouble(Console.ReadLine());
    _values.Add(val);
}

3 - 一旦List类上的方法和列表本身是静态的,您就不需要实例化它。所以你可以这样称呼它:

switch (userSelection)
{
    case UserOption.NewValue:
        List.NewValue();
        break;
    case UserOption.Sum:
        List.Sum();
        break;
    case UserOption.Print:
        List.Print();
        break;
    case UserOption.Quit:
        Console.WriteLine("Quit");
        break;
}

This example is working on dotnetfiddle。如果不是您需要的,请澄清您的问题。

答案 1 :(得分:0)

设计方面,我不会使用静态方法创建List类,因此NewValue,Print和Sum方法成为与实例相关的方法。此外,NewValue(double值)不需要参数,因为它处理读取部分本身。

代码方面,这些是主要需要的更改(看起来像你在正确的轨道上),如果没有先前描述的更改,它们将无法编译,但我会留给你:)

    public static void Main()
{
    UserOption userSelection;
    List myList = new List();
    do
    {
        userSelection = ReadUserOption();

        switch (userSelection)
        {
            case UserOption.NewValue:
                myList.NewValue();
                break;
            case UserOption.Sum:
                myList.Sum();
                break;
            case UserOption.Print:
                myList.Print();
                break;
            case UserOption.Quit:
                Console.WriteLine("Quit");
                break;
        }
    }
    while (userSelection != UserOption.Quit);
}

简单地解释一下,你想要创建一个List实例,并对手中的对象进行所有操作 - myList。从那里开始,一切都非常直接。

编辑: 关于'static'关键字的几句话 - 在这个上下文中,方法的'static'意味着你可以在没有任何实例的情况下调用它们:List.NewValue(...)。