我查看了档案,没有找到能够帮助我理解我正在解决的问题的任何内容。这很可能非常容易,但我发现构建程序的结构组件难以理解。我认为这是使用方法然后将这些方法的结果调用到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}");
}
}
答案 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(...)。