4

在 MicroSoft Visual Studio 2010 中使用 C# 作为控制台程序,在你们的帮助下,我对此进行了一些更改,并且该控制台程序运行正常;但是我需要实现一个常量静态字段,该字段将在 main 方法的输出部分显示座右铭“遵守女童子军法”。我知道这一定很简单,所以请多多包涵。当我在低音类中包含 public static const string Motto = "To Obey the Girl Scout Law" 时,我收到一条错误消息 - 常量 'DemoScouts.GirlScout.Motto' 不能是静态的。以下是该项目的完整代码:

公共课女童子军{

    public static const string Motto = "To Obey the Girl Scout Law";  

    public static string scoutName;
    public static string enterName()
    {
        return scoutName;
    }

    public static int duesOwed;
    public static int enterAmount()
    {
        return duesOwed;
    }

    public static int troopNumber;
    public static int enterNumber()
    {
        return troopNumber;
    }
}

class MainClass : GirlScout
{
    static void Main()
    {
        Console.WriteLine();
        Console.Write("Enter the Girl Scout's name: ");
        GirlScout.scoutName = Console.ReadLine();
        Console.WriteLine();

        Console.Write("Enter their Troop Number: ");
        string n = Console.ReadLine();
        GirlScout.troopNumber = Int32.Parse(n);
        GirlScout.enterNumber();
        Console.WriteLine();

        Console.Write("Enter the amount they Owe in Dues: $");
        string d = Console.ReadLine();
        GirlScout.duesOwed = Int32.Parse(d);
        GirlScout.enterAmount();
        Console.WriteLine();

        // Seperate the input from the output:
        Console.WriteLine();
        Console.WriteLine(GirlScout.Motto);
        Console.WriteLine("-----------------------------------------------");
        Console.WriteLine();

        // Display the new information:
        Console.WriteLine("The name of the Girl Scout is: {0}", GirlScout.scoutName);
        Console.WriteLine("The troop Number of the Girl Scout is:   {0}", GirlScout.troopNumber);
        Console.WriteLine("The amount of Dues Owed by this Girl Scout is: {0}", GirlScout.duesOwed);

        // Keep the console window open in debug mode.
        Console.ReadKey();
    }
}

}

任何和所有的建议将不胜感激。

4

4 回答 4

6

您没有对用户输入的名称做任何事情:

Console.Write("Enter the Girl Scout's name: ");
Console.ReadLine();

应该是这样的:

Console.Write("Enter the Girl Scout's name: ");
GirlScout.scoutName = Console.ReadLine();

您还需要将类型更改scoutName为 astring而不是int.


你还应该重新设计你的班级。使用实例属性而不是静态字段。

public class GirlScout
{
    public string Motto { get; set; }
    public string ScoutName { get; set; }
    public int DuesOwed { get; set; }
    public int TroopNumber { get; set; }
}
于 2012-07-01T18:42:45.770 回答
4

您不会像处理其他数据那样存储用户输入的名称。

于 2012-07-01T18:42:31.403 回答
4

我没有看到分配给GirlScout.scoutName...

旁注:请考虑不使用静态属性(除非它是分配的目标)。要么创建具有正常属性的对象,要么根本不使用它们......

于 2012-07-01T18:43:45.083 回答
1

好吧,您从未初始化 scoutName 的值,那么您希望打印什么?

我认为您缺少这样的一行代码:

GirlScout.scoutName = Console.ReadLine();

不过,我不得不说,你的课程设计得很糟糕。你有公共数据成员,你的方法似乎没有目的或意义——你应该重温封装,并使你的变量私有。使用方法来更改/获取它们的值。

如果您需要任何帮助,请在评论或其他问题中提问。

于 2012-07-01T18:45:13.333 回答