简体   繁体   中英

Can if-else statements appear outside the Main function in C#?

I am very new to both C# and object-oriented programming. I am trying to figure out why this program won't compile. Here is the code snippet that's giving me trouble:

static void AdvancePreLvlThree() // advances player to next level when level is less than three
{
    if(level == 1)
    {
        xp = (xp - 100); // carries remaining xp over to next level
    }
    else if(level == 2)
    {
        xp = (xp - 150);
    }

    level +=1; // advances
    return Update(); // checks again to see if they can advance further
}

The full program:

///////////////////////////////////////////////////////
//
// A namespace/program for managing experience points 
// and determining if the player can level up.
//
// Written by Jared Beach
// January 19, 2013
//
//////////////////////////////////////////////////////

using System;
namespace LevelSystem
{
    public class LevelSystem 
    {
        public void LevelStorage()
        {
            int level = 1; // stores player level
        }

        public void XPStorage()
        {
            int xp = 0; // stores player xp
        }

        public void XPRequirement() // xp required to advance to the next level
        {
            int maxXP = (8 * level^3);

        static void AdvancePreLvlThree() // advances player to next level when level is less than three
        {
            if(level == 1)
            {
                xp = (xp - 100); // carries remaining xp over to next level
            }
            else if(level == 2)
            {
                xp = (xp - 150);
            }

            level +=1; // advances
            return Update(); // checks again to see if they can advance further
        }

        static void Advance() // advances player to next level
        {
            xp = (level - maxXP); // carries remaining xp over to next level
            level +=1;
            return Update();
        }

        static void Update() // checks to see if player can advance levels
        {
            if(level == 1 && xp > 100) // special case to keep basic progression ratio close to one
            {
                AdvancePreLvlThree();
            }
            else if(level == 3 && xp > 150)
            {
                AdvancePreLvlThree();
            }
            else if(xp >= 3 && xp > maxXP) 
            {
               return Advance();
            }
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {

        }
    }
}

The error I am getting is:

Program.cs(30,8): error CS1525: Unexpected symbol `static'
Program.cs(30,16): error CS1547: Keyword `void' cannot be used in this context
Program.cs(30,38): error CS1525: Unexpected symbol `('
Program.cs(36,16): error CS1519: Unexpected symbol `else' in class, struct, or interface member declaration
Program.cs(36,28): error CS1519: Unexpected symbol `==' in class, struct, or interface member declaration
Program.cs(38,20): error CS1519: Unexpected symbol `=' in class, struct, or interface member declaration
Program.cs(38,26): error CS1519: Unexpected symbol `-' in class, struct, or interface member declaration
Program.cs(41,12): error CS1525: Unexpected symbol `level'

It's not in the same class as my Main if that's relevant.

As others have stated you need to show all your code in this case because it sounds like something else is missing / wrong in your code and breaking at that point. Here is a working example of what you are trying to do although it doesn't look like a very good approach having lots of static items and you should really look into Object Oriented Programming !

namespace ConsoleApplication1
{
    class Program
    {
        private static int level = 0;
        private static int xp = 0;

        static void Main(string[] args)
        {
            AdvancePreLvlThree();
        }

        static bool AdvancePreLvlThree() // advances player to next level when level is less than three
        {
            if(level == 1)
            {
                xp = (xp - 100); // carries remaining xp over to next level
            }
            else if(level == 2)
            {
                xp = (xp - 150);
            }

            level +=1; // advances
            return Update(); // checks again to see if they can advance further
        }

        static bool Update()
        {
            // Yes they can...
            return true;
        }
    }
}

I have made your AdvancePreLvlThree method return a bool as that is what you were trying to do but the method was marked as void? Anyway, hopefully this will get you started?

few things,

  1. your method is declared as a void, and it returns update, so make the method same return type as update.
  2. if your method is not in the same class as main then make the method public, reference the new class in the class containing the main.
  3. Declare XP and level as vairables before you use them, declare them at method level scope.
  4. this method should be in the same class as update.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM