Проблемы с пространством имен (отсутствует }?) и передача параметров в метод для отображения массивов

Две проблемы с моим кодом:

1- Я получаю странные синтаксические ошибки с Console.Writeline в Main(), и я думаю, что у меня отсутствует правая фигурная скобка '}'

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().


person fluffywarthog    schedule 07.05.2015    source источник
comment
1- Я получаю странные синтаксические ошибки с Console.Writeline в Main(), и я думаю, что у меня отсутствует правая фигурная скобка '}' Какой редактор вы используете для написания этого кода? Синтаксические ошибки должны быть очевидными проблемами, если у вас хорошая среда разработки.   -  person Eduardo Wada    schedule 07.05.2015
comment
но на самом деле вам не хватает точки с запятой после Console.WriteLine (ваши совпадающие номера:)   -  person Eduardo Wada    schedule 07.05.2015
comment
@EduardoWada: Думаю, Visual Studio, поскольку он упоминает об этом в следующем выпуске.   -  person PiousVenom    schedule 07.05.2015
comment
Правда, мой плохой, все же я думаю, что он закрыл окно с ошибкой или что-то в этом роде, учитывая заданный вопрос   -  person Eduardo Wada    schedule 07.05.2015
comment
разве вы не имели в виду Console.Write({0} + \t, args[i]); в вашем DisplayArray   -  person vidriduch    schedule 07.05.2015
comment
Каждый раз, когда вы спрашиваете о «странных синтаксических ошибках», вам нужно сообщить нам об ошибках< /а>.   -  person Dour High Arch    schedule 07.05.2015


Ответы (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);

to:

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);
        }
    }
}
person mjw    schedule 07.05.2015

//Empty method to display arrays
static void DisplayArray(params int[] args)

Это должно быть static void DisplayArray(int[] array), так как вы все равно передаете массивы, и нет необходимости в ударе по производительности varargs (это то, что вы делаете, когда объявляете параметр как 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() приведет вас туда, куда вам нужно.

person jdphenix    schedule 07.05.2015

Вы не должны передавать тип вместе с параметром при вызове метода. Так, например, DisplayArray(int[] winning); должно быть просто DisplayArray(winning); Исправьте все эти ошибки, и все будет в порядке.

person yazanpro    schedule 07.05.2015