I’m a beginner to java programming, and was trying to make a Rock Paper Scissors game.
I apologize for the lack of comments.
This is my main program, it calls on the other two objects.
import java.util.*;
public class RPSMain extends RPSPlayer{
RPSPlayer player = new RPSPlayer();
RPSGame gameObject = new RPSGame ();
public void main () {
Random generator = new Random ();
Scanner sc = new Scanner(System.in);
System.out.print ("Number of Rounds: ");
int rounds = sc.nextInt();
//Call and process all of the methods found in RPSPlayer and RPSGame
for (int i = 0; i < rounds; i++){
player.makeThrow();
gameObject.makeThrow();
gameObject.announceWinner (compThrow, getPThrow);
}
//Final Output
System.out.print (gameObject.bigWinner(winner, rounds));
}
//accessor to return round to RPSGame
public static int getRound (int round){
this.round = round;
return round;
}
}
My first object is where the player inputs the number of throws that they would like, and it is processed there.
import java.util.*;
public class RPSPlayer {
public static void main (String args[]) {
Random generator = new Random ();
Scanner sc = new Scanner(System.in);
}
//This method gets the throw, and loops if throw is not within 1 and 3
public static int makeThrow (){
Scanner sc = new Scanner (System.in);
int playerThrow;
do{
System.out.print ("Enter your throw (1=Rock, 2=Paper, 3=Scissors)");
playerThrow = sc.nextInt();
} while (playerThrow > 3 && playerThrow < 1);
return playerThrow;
}
//Accessor method
public static int getThrow (int playerThrow){
this.playerThrow = playerThrow;
return playerThrow;
}
}
The last object is where all of the calculations happen.
There is a lot of variables that don’t compile properly, and I can’t quite figure out why…
import java.util.*;
public class RPSGame extends RPSPlayer{
RPSPlayer player = new RPSPlayer();
RPSGame game = new RPSGame ();
RPSMain mainRPS = new mainRPS();
public static void main (String args[]) {
Random generator = new Random ();
Scanner sc = new Scanner(System.in);
int rounds = mainRPS.getRound(rounds);
}
//Random Throw Generator
public static int makeCompThrow (){
int Max = 3;
int Min = 1;
int compThrow = Min + (int)(Math.random() * ((Max - Min) + 1));
return compThrow;
}
// Get the throw from the player in RPSPlayer
public static int getPlayerThrow (){
RPSPlayer player = new RPSPlayer();
int getPThrow = player.makeThrow();
return getPThrow;
}
//Does all of the calculatoins and ouputs who threw what.
public static int announceWinner (int compThrow, int getPThrow) {
int winner = 0;
if (getPThrow == 1){
System.out.println ("Player throws ROCK.");
}
else if (getPThrow == 2){
System.out.println ("Player throws PAPER.");
}
else if (getPThrow == 3){
System.out.println ("Player throws SCISSORS.");
}
if (compThrow == 1){
System.out.println ("Computer throws ROCK.");
}
else if (compThrow == 2){
System.out.println ("Computer throws PAPER.");
}
else if (compThrow == 3){
System.out.println ("Computer throws SCISSORS.");
}
if (getPThrow == compThrow){
winner = 3;
}
else if (getPThrow == 1 && compThrow == 3){
winner = 1;
}
else if (getPThrow == 1 && compThrow == 2){
winner = 2;
}
else if (getPThrow == 2 && compThrow == 1){
winner = 1;
}
else if (getPThrow == 2 && compThrow == 3){
winner = 2;
}
else if (getPThrow == 3 && compThrow == 1){
winner = 2;
}
else if (getPThrow == 3 && compThrow == 2){
winner = 1;
}
return winner;
}
//Final Output with imported values of 'rounds' and 'winner'
public int bigWinner (int winner, int rounds){
int tie = 0;
int playerWins = 0;
int compWins = 0;
if (winner == 1){
playerWins = playerWins + 1;
}
else if (winner == 0){
tie = tie + 1;
}
else if (winner == 3){
compWins = compWins + 1;
}
System.out.println ("You win " +playerWins+ ". Computer wins " +(compWins)+ ".");
if (playerWins > compWins){
System.out.print ("You win!");
}
if (playerWins < compWins){
System.out.print ("Computer wins!");
}
if (playerWins == compWins){
System.out.print ("It's a tie!");
}
return tie;
}
}
When compiled again, 2 new errors appear after adding in WATTO Studios’ suggestions, these are the compiler errors:
RPSMain.java:23: cannot find symbol
symbol : variable winner
location: class RPSMain
RPSGame.bigWinner(winner, rounds);
^
RPSMain.java:23: non-static method bigWinner(int,int) cannot be referenced
from a static context
RPSGame.bigWinner(winner, rounds);
Why can’t it find the variable ‘winner’ if I’m referencing from RPSGame, and why is it still searching RPSMain for the variable?
For these errors, in your
RPSMainclass, you’re trying to access variables from your other classes. Your code here…Should actually be this…
Note that when we call a method like
makeThrow(), we capture the variable and call itplayerThrow. Now we can use this variable in theannounceWinner()method. The same for thecompThrowvariable.You are doing the same thing in your
RPSGame.bigWinner(winner, rounds);line – its complaining thatwinnerdoesn’t exist. This is true –winneris not a variable inRPSMain, its only a variable inRPSGame– you can’t share the variables between different classes like this.Your
gameObject.announceWinner()method returns anintthat represents the actual winner. If you want to use this returned value, you need to capture it into a variable. Currently you have code like this inRPGMain…If you want to keep the
intreturned from theannounceWinner()method, you have to capture it by making the following adjustment…This now says that the value returned from
gameObject.announceWinner()will be stored in a local variable calledwinnerin theRPGMainclass. Now When it tries to use thewinnervariable in thegameObject.bigWinner()method of the next line, it knows about the value.To fix your
non-static method bigWinner(int,int) cannot be referenced from a static contexterror, you need to change the following line…to have the word
staticin it, like this…Or, better yet, remove the word
staticfrom everywhere in your code. If you’re new to Java, trying to usestaticvariables and methods will just make things more complicated then they really need to be, and I can’t see any reason why you’d need them to bestaticin your program.