I hope my tutorial will help you see the beauty in classes and method, and will be an inspiration for you to start using them. My tutorial gives a good example of a basic OO design, and java newcomers can hopefully learn a thing or two />

I have created a basic Rock, Paper, Scissors game (like you haven't found out already!), and I will go through the code with you. I will do my best to try and explain what is going on in the code, but feel free to ask if you have any questions.

Lets get started!Input & output
We want to start off with a console application, so all of out input and output will go through the console.
The class "IO" will be handling everything that has to do with input and output. It is important that the IO class ONLY will have one responsibility, which will be IO handling.

import java.util.Scanner;
public class IO {
private Scanner scanner = new Scanner(System.in);
/**
* Receive input from the user, and check the input against all of the allowed inputs.
*
* @param message The message to show the user before taking input.
* @param possibleInputs All of the allowed inputs.
* @return Returns the first allowed input made by the user.
*/
public String getInput(String message, String... possibleInputs) {
//Show the message
printLine(message);
//Loop as long as the user haven't entered an allowed input
String input;
while (true) {
//Read input from our scanner
input = scanner.nextLine();
//If the input is allowed then break out of the while loop
if (isAllowedInput(input, possibleInputs))
break;
else
printLine("Invalid input!\n" + message);
}
return input;
}
/**
* Checks if 'input' is equal to one of the allowed inputs.
*
* @param input Input made by the user.
* @param possibleInputs All allowed inputs.
* @return Returns true if the input is allowed.
*/
private boolean isAllowedInput(String input, String[] possibleInputs) {
for (int i=0; i<possibleInputs.length; i++)
if (input.equals(possibleInputs[i]))
return true;
return false;
}
/**
* Shows a message to the user through the console.
*
* @param line The message to show.
*/
public void printLine(String line) {
System.out.println(line);
}
}

First of all we have the printLine method. The printLine method is simply a way to show a message to the user, and because we are making a console application, all we have to do is make a System.out.println />

The next method isAllowedInput is also straight forward. We loop through the array and check if we have a match. If there is a match, then we return true to tell the input is allowed. After we have looped through our array, we are sure there is no match, therefore we return false to tell the input is not allowed.

The last method, getInput, is a little tricky! You might see something new here, and if you don't then why are you reading this tutorial anyway (you already know it all)?!
Lets start with the parameter

String... possibleInputs

Many experienced programmers haven't seen this before, and will say it is an error. Well it is not!
String... tells you that possibleInputs is an array, and should be treated that way. What makes String... special is that java will make your parameters (when you call the method) into an array by itself.
It requires an example:

//Input1, Input2, and Input3 will be made into an array!
io.getInput("Our message to show the user", "Input1", "Input2", "Input3");
//Here we call the method using a normal array instead
String[] array = { "Input1", "Input2", "Input3" };
io.getInput("Our message to show the user", array);

So lets move on with our code.
We see that we let the user make an input, then we check the input from the user. If the input is allowed, then we break out of the loop and returns the input, else we just continue looping asking for a new input.

Weapons!!!
Weapons yaaaaaaaay! />

We know we will be needing three weapons: Rock, Paper, and Scissors.
The player would need one of these weapons, so we will be having a super class Weapon that all weapons should extend.

/**
* The super class of all weapons.
* All weapons should be able to be compared to another weapon to check which is strongest.
*/
public abstract class Weapon implements Comparable<Weapon> {
}

We would like to be able to compare the weapons against each other (to see who wins), and that is why the Comparable interface is implemented. We could as well had made a method ourselves named something like: beat(Weapon other)
The interface only has one method: compareTo(T other), where other is the object we want to compare ourself against.
The method should return 1 IF we are stronger than the other, we return -1 if we are weaker, and we return 0 if we are equally strong.
If there are new weapons added to the game, then you would have to edit the compareTo method of all weapons.

I have run into a problem. The project requires Compiler Compliance of 5.0 or 6.0 (1.5 or 1.6), where the code itself requires 1.7 because of the "switch(input)" Any ideas? It's pretty aggrevating. Thanks for any help!!

Ok, now I'm getting more errors within the Main Class. First: The method main cannot be declared static; static methods can only be declared in a static or top
level type

shows up when public static void main(String[] args) is under it. When I add static to Public Class Main, I get

No enclosing instance of type Rock_Paper_Scissors is accessible. Must qualify the allocation with an
enclosing instance of type Rock_Paper_Scissors (e.g. x.new A() where x is an instance of
Rock_Paper_Scissors).

on the line with new Game().startRound(true);

I have no idea what the second one means, or how to fix it. I'm also not sure if I actually fixed the first problem or just appeased Eclipse. Any ideas? Here is my code.

Try separating your main class and don't put static before it. It will be better to make every class separate, but if you want to make the other classes nested except main, then remove public(any access specifier) before them, then it should compile. but make sure you put them in the same directory.

Each class goes in its own .java File. Compile each class. You shouldn't get any errors. I set this project up fine when reviewing this tutorial, with no problems. If you can't figure out how to copy/paste each class in its own file and compile them, you might want to start with something more basic like Hello, World.

I started over, and I copy and pasted all the classes into their own file, verbatum what is in the tutorial. It runs until after the Player 2 chooses a weapon, and I get this error:
Exception in thread "main" java.lang.NullPointerException
at Game.findWinner(Game.java:52)
at Game.startRound(Game.java:37)
at Main.main(Main.java:4)

I googled it and found that it means there's a variable on those lines with a null value. One line is just "findWinner();" and the other is new Game().startRound(true); I don't see any obvious variables that are null.