Проблемы с пространством имен (отсутствует}?) И передача параметров в метод для отображения массивов
Две проблемы с моим кодом:
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().
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);
}
}
}
//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()
доставит вас туда, куда вам нужно идти.
Вы не должны передавать тип вместе с параметром при вызове метода. Так например DisplayArray(int[] winning);
должно быть просто DisplayArray(winning);
Исправьте все эти ошибки, и все будет в порядке.