2015-05-07 5 views
0

Две проблемы с моим кодом:проблемы пространства имен (отсутствует}?) И переходя Params к способу отображения массивов

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

+0

«1- Я получаю странные синтаксические ошибки с помощью Console.Writeline в Main(), и я думаю, что у меня отсутствует правая фигурная скобка»} «Какой редактор вы используете для написания этого кода? Синтаксические ошибки должны быть очевидными, если у вас хорошая среда разработки –

+0

, но вам не хватает полуколонии после Console.WriteLine («Ваши соответствующие номера:») –

+0

@EduardoWada: Угадайте Visual Studio, так как он упоминает об этом в следующий вопрос. – MyCodeSucks

ответ

0

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

3

Несколько вещей, чтобы очистить свои синтаксические ошибки:

1-Для отображения значений в массиве «аргументы» (это передается в качестве параметра DisplayArray в вашей подписи методы), изменение «массив [ 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); 

Удачи вам!

UPDATE

Вот рабочий прототип:

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); 
     } 
    } 
} 
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() доставит вас туда, куда вам нужно.