Purple Sloth
Purple Sloth

Reputation: 17

First time attempting programing. What am I doing wrong here?

enter image description hereFor my first try, I looked up some YouTube tutorials. One is showing how to create a Magic 8 Ball. I am following the instructions pretty much exactly but it won't work. When written like this it's fine:

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

            //Preserve Current Console Text Color
            ConsoleColor OldColor = Console.ForegroundColor;

            //Change Console Text Color
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Magic 8 Ball. By: Conner Bostock");

            Console.ForegroundColor = ConsoleColor.White;
            Console.Write("Ask a question?: ");
            Console.ForegroundColor = ConsoleColor.DarkGray;
            String QuestionString = Console.ReadLine();
            //Cleaning Up
            Console.ForegroundColor = OldColor;
        }

        String Void TellPeopleTheName(String Text);
    }
}

As you see I am trying to try create a String, not that I need one to do this. I just want to see how it works (So when I need it I don't need to re-type it and can just post this) But starting off it says "TellPeopleTheName must declare a body" I'm confused as this did not happen in the video. Not only that but when I cut and paste the code to join with it. For some reason it all breaks and no longer works:

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

            //Preserve Current Console Text Color
            ConsoleColor OldColor = Console.ForegroundColor;

            Console.ForegroundColor = ConsoleColor.White;
            Console.Write("Ask a question?: ");
            Console.ForegroundColor = ConsoleColor.DarkGray;
            String QuestionString = Console.ReadLine();
            //Cleaning Up
            Console.ForegroundColor = OldColor;
        }

        String Void TellPeopleTheName(String Text);

        //Change Console Text Color
        Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Magic 8 Ball. By: Conner Bostock");

The entire bottom section is underlined in red saying "Invalid Token" and Writeline does not exist in this context". This confuses me more as this did not happen in the video either. What am I doing so wrong?

Thanks for the help and sorry for the nooby comments. I'm 20 and always wanted to learn coding but always been too busy working. Recently broke my back and now have plenty of time sitting doing nothing so I figured I would give it a shot.

This is mine (on top) and his (Bellow) and even after your help (I did go and re-watch and noticed I put String Void and not Static void) These problems still are here and I still don't understand. I apologise. I am really trying to learn and understand. This is a section I could skip and still make the 8-ball but I want to know why it does not work and how to fix it so then I know for when I do need to use this. NEW FULL CODE:

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

            //Preserve Current Console Text Color
            ConsoleColor OldColor = Console.ForegroundColor;

            Console.ForegroundColor = ConsoleColor.White;
            Console.Write("Ask a question?: ");
            Console.ForegroundColor = ConsoleColor.DarkGray;
            String QuestionString = Console.ReadLine();
            //Cleaning Up
            Console.ForegroundColor = OldColor;
        }
        //This will tell people the name
        static void TellPeopleTheName()

        //Change Console Text Color
        Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Magic 8 Ball. By: Conner Bostock");
    }

Upvotes: 0

Views: 106

Answers (4)

Blake Thingstad
Blake Thingstad

Reputation: 1659

I notice a couple things you've missed in understanding.

What you've tried to do is write a method to write to the console the name of the program, but the method is not structured correctly.

The general structure of a method is...

AccessModifier static/non-static ReturnType MethodName (ParameterType ParameterName) {
    //code to do something
}

An access modifier defines how accessible the method is to other code (as a starting programmer, just keep it as public until you become more advanced).

Putting static or nothing (non-static) is a little confusing for a beginner, if you'll be calling the method from Main (a static method) then it will need to be static, that's sufficient enough for a beginner's understanding for now.

The return type defines what the method should return back when the method is called.

The method name is just how the method is called, should be descriptive and clear what the method does.

A parameter type is the type of object that is being passed as a parameter for the method to use.

A parameter name is just a name, the name should easily explain what the parameter's purpose is for the method.

Following this structure, your method should look like...

public static void TellPeopleTheName(string text)
{
    //Change Console Text Color
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Magic 8 Ball. By: Conner Bostock");
}

If you want to make the method more "correct", then it would be...

public static void TellPeopleTheName(string nameOfProgram)
{
    //Change Console Text Color
    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine(nameOfProgram);
}

and you would call the method like this...

TellPeopleTheName("Magic 8 Ball. By: Conner Bostock");

Upvotes: 0

Mike
Mike

Reputation: 101

String Void TellPeopleTheName(String Text);

should be

void TellPeopleTheName(String Text)
{

}

That would take care of "missing body" error!

Upvotes: 1

David
David

Reputation: 218798

This line is out of place and doesn't actually do anything:

String Void TellPeopleTheName(String Text);
  1. It's void, not Void. Casing matters.
  2. You're giving it two return types, String and void. It either returns something or it doesn't.
  3. That's a method header, but you're missing a method body. As a single line of code it doesn't make sense. Methods need to do something.

For example, a method might look like this:

void TellPeopleTheName(string text)
{
    // write code in here to do something
}

Then you would invoke (call) that method somewhere from another method, when you want to perform that operation:

TellPeopleTheName("some text");

Or, in the case of a method which returns a string:

string TellPeopleTheName(string text)
{
    // code which does something

    return "some string";
}

Invoking it would be the same, but you could store the return value in a variable or otherwise use it in some way:

var someVariable = TellPeopleTheName("some text");

(Note: There are an ongoing variety of issues you may encounter even in trying what's described here. The difference between a static and non-static method come to mind, particularly if you try to call this from main(). Or the variety of ways you may return from a method or use the returned value. And so on. There's much to learn. Good luck!)

Upvotes: 4

Paul Marques
Paul Marques

Reputation: 604

void should be in lowercase. You are missing open/close brackets on the method too.

Upvotes: 0

Related Questions