0

我的代码有两个问题:

1- 我在 Main() 中使用 Console.Writeline 时遇到奇怪的语法错误,我认为我缺少右花括号 '}'

2- 在 Main() 之后,我似乎无法弄清楚我的第一个方法。它应该是一个简单的 void 方法来编写数组的元素,但 Visual Studio 似乎认为它是错误中的类或命名空间。

谁能发现我哪里搞砸了?

public static void Main(string[] args)
{
    //static array for winning[6], empty for player[6], empty for matching[6]
    int [] winning = new int [6] {2, 4, 6, 9, 1, 3};
    int [] player = new int [6];
    int [] matching = new int [6];
    int inValue;

    //Input loop
    Console.WriteLine("Please enter six lotto numbers, between 1 and 9");

    for (int i = 0; i < player.Length; i++)
    {
        inValue = Console.Read();
        if (inValue < 1 || inValue > 9) //Validate for int 1-9
        {
            Console.WriteLine("Please enter a whole number between 1 and 9");
        }
        winning[i] = inValue;
    }

    //Output
    Console.WriteLine("The winning numbers were:");
    DisplayArray(int[] winning);
    Console.WriteLine("Your numbers were:");
    DisplayArrayContents(int[] player);
    Console.WriteLine("You had " + MatchCount() + " matches.");
    Console.WriteLine("Your matching numbers are:")
    DisplayArrayContents(int[] matching);
    Console.Read();
}

//Empty method to display arrays
static void DisplayArray(params int[] args)
{
    for (int i = 0; i < args.Length; i++)
    {
        Console.Write({0} + "\t", array[i]);
    }
    Console.Write("\n");
} 

编辑:谢谢大家!我忘了重命名那里的一些变量和方法,但主要问题是缺少;和不必要的数据类型作为 Main() 中的参数。

4

3 回答 3

3

清理语法错误的几件事:

1-要在数组“args”中显示值(在方法签名中作为参数传递给 DisplayArray),将“array[i]”更改为“args[i]”。

static void DisplayArray(params int[] args)
{
    for (int i = 0; i < args.Length; i++)
    {
        Console.Write("{0}\t", args[i]);
    }
    Console.Write("\n");
} 

2-调用DisplayArray时,只需要在方法中传入你要操作的数组的实例,所以把调用改成:

DisplayArray(int[] winning);
DisplayArrayContents(int[] player);

至:

DisplayArray(winning);
DisplayArrayContents(player);

祝你好运!

更新

这是一个工作原型:

class Program
{
    static void DisplayArray(params int[] args)
    {
        for (int i = 0; i < args.Length; i++)
        {
            Console.Write("{0}\t", args[i]);
        }
        Console.Write("\n");
    }

    static void Main(string[] args)
    {
        //static array for winning[6], empty for player[6], empty for matching[6]
        int [] winning = new int [6] {2, 4, 6, 9, 1, 3};
        string[] tmp = new string[6];
        int [] player = new int [6];
        int [] matching = new int [6];
        string line;
        int inValue;
        bool valid;

        //Input loop
        do
        {
            Console.WriteLine("Please enter six lotto numbers between 1 and 9, separated by spaces: ");
            valid = true;
            line = Console.ReadLine();
            tmp = line.Split(' '); //split on space
            for (int i = 0; i < tmp.Length; i++)
            {
                int.TryParse(tmp[i], out inValue);
                if (inValue < 1 || inValue > 9) //Validate for int 1-9
                {
                    Console.WriteLine("{0} must be a whole number between 1 and 9", tmp[i]);
                    valid = false;
                }
                player[i] = inValue;
            }
        }
        while (!valid);

        //Output
        Console.WriteLine("The winning numbers were:");
        DisplayArray(winning);
        Console.WriteLine("Your numbers were:");
        DisplayArray(player);
        //Console.WriteLine("You had " + MatchCount() + " matches.");
        //Console.WriteLine("Your matching numbers are:")
        //DisplayArrayContents(matching);
        //Console.Read();


        string retVal = "";
        while(retVal != "exit")
        {
            Console.WriteLine("Type 'exit' to end the program: ");
            retVal = Console.ReadLine();
            if (retVal == "exit")
                Environment.Exit(0);
        }
    }
}
于 2015-05-07T15:42:23.507 回答
2
//Empty method to display arrays
static void DisplayArray(params int[] args)

这应该static void DisplayArray(int[] array)params int[] args.


Console.Write({0} + "\t", array[i]);

您不会像这样将格式字符串连接在一起。您可以使用:

Console.Write("{0}\t", array[i]); 

此外,array未在DisplayArray()您的实现内部定义。你已经命名了你的参数args


DisplayArrayContents(int[] matching);

您没有DisplayArrayContents方法,也不需要再次指定要传入的内容的类型。编译器可以在调用时保证类型安全,所以你只需按名称传递它,

DisplayArray(matching);

这里缺少一个分号:

Console.WriteLine("Your matching numbers are:")

在您的输入循环中,您正在将玩家输入写入winning数组,这意味着他们最终总是会选择中奖号码,因为他们只是将它们放入。

你可能想要player[i] = inValue;


inValue = Console.Read()

这并不符合您的预期。尝试一个程序:

var inValue = Console.Read();
Console.WriteLine(inValue);

并在控制台输入 1。您将得到与 不同的输出1,因为Console.Read()返回char值。

的组合Console.ReadLine()Int32.Parse()也许String.Split()会让你到达你需要去的地方。

于 2015-05-07T15:54:44.423 回答
0

调用方法时,不应将类型与参数一起传递。因此,例如DisplayArray(int[] winning);应该只是DisplayArray(winning);修复所有这些错误,你应该没问题。

于 2015-05-07T15:38:52.130 回答