Проблема с интеграцией цикла в моей программе - PullRequest
0 голосов
/ 16 декабря 2018

Я довольно новичок в ОО-программировании, я создал простую игру "Угадай число", она работает правильно.Однако при попытке реализовать цикл возникают ошибки.В частности, я хочу, чтобы пользователь перезапустил программу через консоль [не компилируя и не запуская игру снова].

Мне нужна помощь с методом static void ExitGame ().В данный момент я работаю над "RepL.it", и сгенерированные ошибки следующие:

main.cs (10,10): предупреждение CS0649: Поле GuessTheNumber.Game.replay' is never assigned to, and will always have its default value null 'Компиляция выполнена успешно -1 предупреждение (я) Добро пожаловать в угадайку.Пожалуйста, нажмите Enter.

using System;

namespace GuessTheNumber
{
  class Game
  {

  static int UserGuess;
  static int Answer;
  string replay;
  static string EndProg = "No";

    static void Main (string[] args)
    {
      Console.Title = "Guess the number.";

      EntryMessage();
      GenerateRandom();

      while (EndProg == "No") {
        askData();
      }
    }

    static void EntryMessage()
    {
      Console.WriteLine("Welcome to the guessing game. Please press enter.");
      Console.ReadLine();
    }

    public static void askData()
    {
      while (EndProg == "No")
      {
        Console.WriteLine(Answer);
        Console.WriteLine("Guess a number between 1 and 100.");
        UserGuess = Convert.ToInt32(Console.ReadLine());
        WinLose();
      }
      askData();
    }

    public void askData(bool endProg)
    {
      Console.WriteLine("Does you want to play again");
      if (replay == "y")//; Remove this semicolon
      {
      Console.WriteLine("\nOkay, guess again");
      askData(EndProg == "No");
      }
      else if (replay == "n")//; Remove this semicolon
      {
        askData(EndProg == "Yes");
      }
      else
      {
        Console.ReadLine();
      }
    }

    static void GenerateRandom()
    {
      Random random = new Random();
      Answer = random.Next(0,101);
    }
      static void WinLose() 
      {
        if (UserGuess == Answer)
        {
          Console.WriteLine("Correct number!");
          EndProg="Yes";
        }
        else if (UserGuess > Answer)
        {
          Console.WriteLine("Too high.");
          EndProg="No";
        }
        else if (UserGuess < Answer)
        {
          Console.WriteLine("Too Low.");
          EndProg="No";
        }
        else 
        {
          Console.WriteLine("Invalid answer.");
          EndProg="No";
        }
      }
  }
}

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

В вашем коде есть ряд синтаксических ошибок:

  1. Если в скобках операторов не должно быть суффикса

    else if (replay == "n");
    

    должно быть

    else if (replay == "n")
    
  2. Ваш метод askData () иногда вызывается с аргументом bool, но не принимает один

    void askData()
    

    должен быть

    void askData(bool endProg)
    
  3. Вы смешиваете и сопоставляете статические и нестатические методы, и вам необходимо решить, применять ли эту логику в статическом контексте или в контексте экземпляра

0 голосов
/ 16 декабря 2018

Я полагаю, что виновником здесь являются точки с запятой, которые у вас есть после ваших операторов if / else:

    static void ExitGame()
{
  Console.WriteLine("Does you want to play again");
  if (replay == "y")//; Remove this semicolon
  {
  Console.WriteLine("\nOkay, guess again");
  askData(EndProg == "No");
  }
  else if (replay == "n")//; Remove this semicolon
  {
    askData(EndProg == "Yes");
  }
  else
  {
    Console.ReadLine();
  }
}

Эти точки с запятой заканчивают оператор, после чего блоки Else If / Else не следуют IFблок, который синтаксически недопустим.

Это также объясняет предупреждения пустого оператора, генерируемые компилятором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...