Problem with running random class
My program complies and runs, but the random method is selecting randoms numbers instead of the numbers I assigned the colours? Any hints on hoe I can fix this??
Code java:
import java.util.*;
import java.util.Random;
public class AssigOne112
{
public static void main(String[] args)
{
// Initialising Scanner and setting Random
Scanner sc= new Scanner(System.in);
Random generator;
// Set seed value
final int SEED = 400;
// Colour variable for vehicles
final int BLACK = 0;
final int BLUE = 1;
final int CYAN = 2;
final int DARK_GREY = 3;
final int GREY = 4;
final int GREEN = 5;
final int LIGHT_GREY = 6;
final int MAGENTA = 7;
final int ORANGE = 8;
final int PINK = 9;
final int RED = 10;
final int WHITE = 11;
final int YELLOW = 12;
// Value of coloured cars
final int BLACK_CAR_VALUE = 1;
final int WHITE_CAR_VALUE = 1;
final int GREEN_CAR_VALUE = 2;
final int YELLOW_CAR_VALUE = 3;
final int BLUE_CAR_VALUE = 4;
final int ORANGE_CAR_VALUE = 5;
final int CYAN_CAR_VALUE = 0;
final int DARK_GREY_CAR_VALUE = 0;
final int GREY_CAR_VALUE = 0;
final int LIGHT_GREY_CAR_VALUE = 0;
final int MAGENTA_CAR_VALUE = 0;
final int PINK_CAR_VALUE = 0;
//Calculated players average
double avgScore1;
double avgScore2;
// Variables
// Players name input
String name1;
String name2;
String playerOne;
String playerTwo;
String name;
// Players sequence
boolean playerSequence;
int currentPlayer;
// Variables for players scoring
int player1Total = 0;
int player2Total = 0;
int scoreInning = 0;
// Final score
int score =0;
// Assigns winner
int won = 0;
// Assigns number of innings
int playGame = 0;
// Starts count for innings
int innings = 0;
int colourNum = 0;
String colour;
// Numbers 1-9 are cars, number 0 is other vehicle
int vehicleType = 0;
boolean isCar = (vehicleType !=0);
//Game Rules
System.out.println("Car Cricket Game");
System.out.println("================");
System.out.println("Scoring: non white/black/red/green/yellow/blue/orange car: 0 runs.");
System.out.println("White/black car: 1 run.");
System.out.println("Non-red van/truck/bus/SUV: 1 run.");
System.out.println("Green car: 2 runs.");
System.out.println("Yellow car: 3 runs.");
System.out.println("Blue car: 4 runs.");
System.out.println("Orange car: 5 runs.");
System.out.println("Red van/truck/bus/SUV: 6 runs.");
System.out.println("Red car: OUT!");
System.out.println();
System.out.println("Time to play!");
System.out.println();
//Ask user to input names and innings wanting to play.
System.out.print("Two players are required to play this game. Please enter the name of one of the players: ");
playerOne = sc.next();
System.out.print("Please enter the name of the other player: ");
playerTwo = sc.next();
System.out.print("Answering either true or false, is " + playerOne + " going to bat first? ");
playerSequence = sc.nextBoolean();
System.out.print("How many innings do you want to play in this game? ");
playGame = sc.nextInt();
//installation of Random function
generator = new Random(SEED);
// For loop to count innings
for(innings=1; innings<=playGame; innings ++)
{
System.out.println("Innings # " + innings);
// For loop to alternate between players
for(currentPlayer = 1; currentPlayer <=2; currentPlayer ++)
{
if(playerSequence)
{
name1 = playerOne;
name2 = playerTwo;
}
else
{
name1 = playerTwo;
name2 = playerOne;
}
System.out.print("Player #" + currentPlayer + " ");
// determine current player's name
if (currentPlayer == 1)
{
name = name1;
}
else
{
name = name2;
}
System.out.println("(" + name + ")");
// add score to a global scoring of given player
if (currentPlayer == 1)
{
player1Total = player1Total + score;
}
else
{
player2Total = player2Total + score;
}
// While loop continues until red colur is choosen
while(colourNum!=RED)
{
colourNum = generator.nextInt(13);
vehicleType = generator.nextInt(10);
score = colourNum;
colour = "";
if (vehicleType >= 1 && vehicleType <= 9)
{
isCar = true;
// add score by given colour to inning's score
scoreInning += score;
switch (colourNum)
{
case BLACK:
colour = "Black";
score = score + BLACK_CAR_VALUE;
break;
case BLUE:
colour = "Blue";
score = score + BLUE_CAR_VALUE;
break;
case CYAN:
colour = "Cyan";
score = score + CYAN_CAR_VALUE;
break;
case DARK_GREY:
colour = "Dark Grey";
score = score + DARK_GREY_CAR_VALUE;
break;
case GREY:
colour = "Grey";
score = score + GREY_CAR_VALUE;
break;
case GREEN:
colour = "Green";
score = score + GREEN_CAR_VALUE;
break;
case LIGHT_GREY:
colour = "Light Grey";
score = score + LIGHT_GREY_CAR_VALUE;
break;
case MAGENTA:
colour = "Magenta";
score = score + MAGENTA_CAR_VALUE;
break;
case ORANGE:
colour = "Orange";
score = score + ORANGE_CAR_VALUE;
break;
case PINK:
colour = "Pink";
score = score + PINK_CAR_VALUE;
break;
case RED:
colour = "Red";
//score = score + RED_CAR_VALUE;
break;
case WHITE:
colour = "White";
score = score + WHITE_CAR_VALUE;
break;
case YELLOW:
colour = "Yellow";
score = score + YELLOW_CAR_VALUE;
break;
}
System.out.println(colour + " car..." + score);
}
if(vehicleType==0)
{
isCar = false;
System.out.println(colour + " van/truck/bus/SUV..." + score);
}
}
// If loop for random red colour selection
if(colourNum == RED)
{
isCar=true;
System.out.println("OUT!");
System.out.println("Total was " + scoreInning);
System.out.println("Current scores: ");
System.out.println(name1 + ": " + player1Total);
System.out.println(name2 + ": " + player2Total);
}
if(isCar = false)
{
colourNum = RED;
scoreInning += 6;
if (currentPlayer == 1)
{
player1Total = sc.nextInt();
player1Total += 6;
}
else
{
player2Total = sc.nextInt();
player2Total += 6;
}
System.out.println("6");
}
else
{
scoreInning += 1;
if (currentPlayer == 1)
{
player1Total += 1;
}
else
{
player2Total += 1;
}
System.out.println("1");
}
//Find the winner.
if (player1Total == player2Total)
{
System.out.println("Draw!");
}
else
if (player1Total > player2Total)
{
avgScore1 = player1Total/playGame;
System.out.println(name1 + " (with avg " + avgScore1 + ") won");
}
else
if (player1Total < player2Total)
{
avgScore2 = player2Total/playGame;
System.out.println(name2 + " (with avg " + avgScore2 + ") won");
}
}
}
}
}
Re: Problem with running random class
Please Edit your post and wrap your code with[code=java]<YOUR CODE HERE>[/code] to get highlighting
This is a strange looking while statement:
Quote:
while(currentPlayer = 1 && currentPlayer <=2 && currentPlayer ++)
Does this code compile for you?
What do you want it to do?
Re: Problem with running random class
Hi Norm, it is a game played by two players that state how many innings they want to play. It then should alternate between the two players, within each innings, random cars and non cars of different colours pass until the random selects a red car, which means the player is out. And then it is the next players turn.
When I run the program, it states first player name and innings 1 and then does nothing, I dont know why it does start randomly selecting the colours and vehicles??? I hope you can help me :)
Re: Problem with running random class
The code you posted does not compile. How can you execute the program with compiler errors?
Please post the full text of the compiler errors you are getting.
The code needs to be formatted. It should not all start in the first column.
There should be indentations for each nesting level of the logic within loops and if statements. Unformatted code is very hard to read and understand.
Re: Problem with running random class
Here are the compiler errors:
--------------------Configuration: <Default>--------------------
:305: while expected
}
^
:307: illegal start of expression
}
^
:307: ')' expected
}
^
:308: reached end of file while parsing
}
^
:309: reached end of file while parsing
^
5 errors
Process completed.
Re: Problem with running random class
Quote:
:305: while expected
Is there a do without a while()?
Re: Problem with running random class
I have a while loop inside the do loop, is this wrong?
Re: Problem with running random class
No it is ok to have loops inside of loops. No problem there.
Re: Problem with running random class
I have rewritten my program it compiles, but it is not entering into the while loop??? any suggestions???
Re: Problem with running random class
Post the new code that compiles.
Try debugging it by adding printlns that print out the values of the variables used in the while statement so you can see what the computer sees and know why it is doing what it does.
Re: Problem with running random class
Take away the do and its brackets, and take away the semicolon from the end of the while loop.
Should be this
Code :
import java.util.*;
import java.util.Random;
public class AssigOne112
{
public static void main(String[] args)
{
Scanner sc= new Scanner(System.in);
Random generator;
//Set seed value
final int SEED = 400;
//Final var
final int CARS = 4;
//Colour variable for vehicles
final int BLACK = 0;
final int BLUE = 1;
final int CYAN = 2;
final int DARK_GREY = 3;
final int GREY = 4;
final int GREEN = 5;
final int LIGHT_GREY = 6;
final int MAGENTA = 7;
final int ORANGE = 8;
final int PINK = 9;
final int RED = 10;
final int WHITE = 11;
final int YELLOW = 12;
//Value of coloured cars
final int BLACK_CAR_VALUE = 1;
final int WHITE_CAR_VALUE = 1;
final int GREEN_CAR_VALUE = 2;
final int YELLOW_CAR_VALUE = 3;
final int BLUE_CAR_VALUE = 4;
final int ORANGE_CAR_VALUE = 5;
final int CYAN_CAR_VALUE = 0;
final int DARK_GREY_CAR_VALUE = 0;
final int GREY_CAR_VALUE = 0;
final int LIGHT_GREY_CAR_VALUE = 0;
final int MAGENTA_CAR_VALUE = 0;
final int PINK_CAR_VALUE = 0;
//Calculated players average
double avgScore1;
double avgScore2;
//Variables
// players name input
String name1;
String name2;
String playerOne;
String playerTwo;
String name;
//Players sequence
boolean playerSequence;
int currentPlayer;
int player;
//Variables for players scoring
int player1Total;
int player2Total;
int scoreInning = 0;
//Final score
int score =0;
int won = 0;
int playGame = 0;
String getColour;
int innings = 0; //starts count for innings
int colourNum = -1;
String colour;
int getScoreByColour;
int vehicleType = -1;
boolean isCar = (vehicleType !=0);
//Game Rules
System.out.println("Car Cricket Game");
System.out.println("================");
System.out.println("Scoring: non white/black/red/green/yellow/blue/orange car: 0 runs.");
System.out.println("White/black car: 1 run.");
System.out.println("Non-red van/truck/bus/SUV: 1 run.");
System.out.println("Green car: 2 runs.");
System.out.println("Yellow car: 3 runs.");
System.out.println("Blue car: 4 runs.");
System.out.println("Orange car: 5 runs.");
System.out.println("Red van/truck/bus/SUV: 6 runs.");
System.out.println("Red car: OUT!");
System.out.println();
System.out.println("Time to play!");
System.out.println();
//Ask user to input names and innings wanting to play.
System.out.print("Two players are required to play this game. Please enter the name of one of the players: ");
playerOne = sc.next();
System.out.print("Please enter the name of the other player: ");
playerTwo = sc.next();
System.out.print("Answering either true or false, is " + playerOne + " going to bat first? ");
playerSequence = sc.nextBoolean();
System.out.print("How many innings do you want to play in this game? ");
playGame = sc.nextInt();
//installation of Random function
generator = new Random(SEED);
while(innings<=playGame)
{
for(innings=1; innings<=playGame; innings ++)
{
System.out.println("Innings # " + innings);
for(currentPlayer = 1; currentPlayer <=2; currentPlayer ++)
{
if(playerSequence)
{
name1 = playerOne;
name2 = playerTwo;
}
else
{
name1 = playerTwo;
name2 = playerOne;
}
System.out.print("Player #" + currentPlayer + " ");
// determine current player's name
if (currentPlayer == 1)
{
name = name1;
}
else
{
name = name2;
}
System.out.println("(" + name + ")");
System.out.println();
player1Total = sc.nextInt();
player2Total = sc.nextInt();
// add score to a global scoring of given player
if (currentPlayer == 1)
{
player1Total +=score;
}
else
{
player2Total +=score;
}
if (vehicleType != 0)
{
isCar = true;
colourNum = generator.nextInt(13);
score = colourNum;
vehicleType = generator.nextInt(10) + 1;
//return vehicleType >= 1 && vehicleType <= 9;
// add score by given colour to inning's score
scoreInning += score;
System.out.print(" car...");
if(colourNum == RED)
{
System.out.println("OUT!");
System.out.println("Total was " + scoreInning);
System.out.println("Current scores: ");
System.out.println(name1 + ": " + player1Total);
System.out.println(name2 + ": " + player2Total);
}
colour = "";
switch (colourNum)
{
case BLACK:
colour = "Black";
score = BLACK_CAR_VALUE;
break;
case BLUE:
colour = "Blue";
score = BLUE_CAR_VALUE;
break;
case CYAN:
colour = "Cyan";
score = CYAN_CAR_VALUE;
break;
case DARK_GREY:
colour = "Dark Grey";
score = DARK_GREY_CAR_VALUE;
break;
case GREY:
colour = "Grey";
score = GREY_CAR_VALUE;
break;
case GREEN:
colour = "Green";
score = GREEN_CAR_VALUE;
break;
case LIGHT_GREY:
colour = "Light Grey";
score = LIGHT_GREY_CAR_VALUE;
break;
case MAGENTA:
colour = "Magenta";
score = MAGENTA_CAR_VALUE;
break;
case ORANGE:
colour = "Orange";
score = ORANGE_CAR_VALUE;
break;
case PINK:
colour = "Pink";
score = PINK_CAR_VALUE;
break;
case RED:
colour = "Red";
//score = score + RED_CAR_VALUE;
break;
case WHITE:
colour = "White";
score = WHITE_CAR_VALUE;
break;
case YELLOW:
colour = "Yellow";
score = YELLOW_CAR_VALUE;
break;
}
return;
}
else
{
if (colourNum == RED)
{
isCar = false;
System.out.print(" van/truck/bus/SUV...");
scoreInning += 6;
if (currentPlayer == 1)
{
player1Total += 6;
}
else
{
player2Total += 6;
}
System.out.println("6");
}
else
{
scoreInning += 1;
if (currentPlayer == 1)
{
player1Total += 1;
}
else
{
player2Total += 1;
}
System.out.println("1");
}
}
//Find the winner.
if (player1Total == player2Total)
{
System.out.println("Draw!");
}
else if (player1Total > player2Total)
{
avgScore1 = player1Total/playGame;
System.out.println(name1 + " (with avg " + avgScore1 + ") won");
}
else if (player1Total < player2Total)
{
avgScore2 = player2Total/playGame;
System.out.println(name2 + " (with avg " + avgScore2 + ") won");
}
}
}
}
}
}
Re: Problem with running random class
I have edited code in first post with changes I have made. I wil try the debugging you have suggested, thanks
Re: Problem with running random class
& try splitting it up, using a settings class -- will make the entire code a lot cleaner. Also, your doing a lot of weird stuff that you don't really need to in the code.
Re: Problem with running random class
you have a little bit of a misunderstanding on how do while loops work.
Instead, take away the do and the semicolon at the end of the while
Theres
do{
//code
}while(this statement is still true);
and then theres
while(this statement is true){
//code
}
Re: Problem with running random class
I have done debugging and worked out whats going wrong:
player1Total = sc.nextInt();
This is where my program stops, but when I remove it, I get error message : variable player1Total might not have been initialized
I'm not sure how to initialse it as I thought was correct initialisation?
Re: Problem with running random class
Have you first corrected the error I've pointed out?
What I'm getting
Car Cricket Game
================
Scoring: non white/black/red/green/yellow/blue/orange car: 0 runs.
White/black car: 1 run.
Non-red van/truck/bus/SUV: 1 run.
Green car: 2 runs.
Yellow car: 3 runs.
Blue car: 4 runs.
Orange car: 5 runs.
Red van/truck/bus/SUV: 6 runs.
Red car: OUT!
Time to play!
Two players are required to play this game. Please enter the name of one of the players: a
Please enter the name of the other player: b
Answering either true or false, is a going to bat first? true
How many innings do you want to play in this game? 1
Innings # 1
Player #1 (a)
1
2
car...
& then it terminates.
Re: Problem with running random class
You need to take the return out of your switch statment next -- it's ending the game when it gets to that.
Now I'm getting
Car Cricket Game
================
Scoring: non white/black/red/green/yellow/blue/orange car: 0 runs.
White/black car: 1 run.
Non-red van/truck/bus/SUV: 1 run.
Green car: 2 runs.
Yellow car: 3 runs.
Blue car: 4 runs.
Orange car: 5 runs.
Red van/truck/bus/SUV: 6 runs.
Red car: OUT!
Time to play!
Two players are required to play this game. Please enter the name of one of the players: a
Please enter the name of the other player: b
Answering either true or false, is a going to bat first? true
How many innings do you want to play in this game? 2
Innings # 1
Player #1 (a)
1
1
car...Draw!
Player #2 (b)
1
1
car...Draw!
Innings # 2
Player #1 (a)
1
1
car...Draw!
Player #2 (b)
1
1
car...b (with avg 1.0) won
Code :
import java.util.*;
import java.util.Random;
public class AssigOne112
{
public static void main(String[] args)
{
Scanner sc= new Scanner(System.in);
Random generator;
//Set seed value
final int SEED = 400;
//Final var
final int CARS = 4;
//Colour variable for vehicles
final int BLACK = 0;
final int BLUE = 1;
final int CYAN = 2;
final int DARK_GREY = 3;
final int GREY = 4;
final int GREEN = 5;
final int LIGHT_GREY = 6;
final int MAGENTA = 7;
final int ORANGE = 8;
final int PINK = 9;
final int RED = 10;
final int WHITE = 11;
final int YELLOW = 12;
//Value of coloured cars
final int BLACK_CAR_VALUE = 1;
final int WHITE_CAR_VALUE = 1;
final int GREEN_CAR_VALUE = 2;
final int YELLOW_CAR_VALUE = 3;
final int BLUE_CAR_VALUE = 4;
final int ORANGE_CAR_VALUE = 5;
final int CYAN_CAR_VALUE = 0;
final int DARK_GREY_CAR_VALUE = 0;
final int GREY_CAR_VALUE = 0;
final int LIGHT_GREY_CAR_VALUE = 0;
final int MAGENTA_CAR_VALUE = 0;
final int PINK_CAR_VALUE = 0;
//Calculated players average
double avgScore1;
double avgScore2;
//Variables
// players name input
String name1;
String name2;
String playerOne;
String playerTwo;
String name;
//Players sequence
boolean playerSequence;
int currentPlayer;
int player;
//Variables for players scoring
int player1Total;
int player2Total;
int scoreInning = 0;
//Final score
int score =0;
int won = 0;
int playGame = 0;
String getColour;
int innings = 0; //starts count for innings
int colourNum = -1;
String colour;
int getScoreByColour;
int vehicleType = -1;
boolean isCar = (vehicleType !=0);
//Game Rules
System.out.println("Car Cricket Game");
System.out.println("================");
System.out.println("Scoring: non white/black/red/green/yellow/blue/orange car: 0 runs.");
System.out.println("White/black car: 1 run.");
System.out.println("Non-red van/truck/bus/SUV: 1 run.");
System.out.println("Green car: 2 runs.");
System.out.println("Yellow car: 3 runs.");
System.out.println("Blue car: 4 runs.");
System.out.println("Orange car: 5 runs.");
System.out.println("Red van/truck/bus/SUV: 6 runs.");
System.out.println("Red car: OUT!");
System.out.println();
System.out.println("Time to play!");
System.out.println();
//Ask user to input names and innings wanting to play.
System.out.print("Two players are required to play this game. Please enter the name of one of the players: ");
playerOne = sc.next();
System.out.print("Please enter the name of the other player: ");
playerTwo = sc.next();
System.out.print("Answering either true or false, is " + playerOne + " going to bat first? ");
playerSequence = sc.nextBoolean();
System.out.print("How many innings do you want to play in this game? ");
playGame = sc.nextInt();
//installation of Random function
generator = new Random(SEED);
while(innings<=playGame)
{
for(innings=1; innings<=playGame; innings ++)
{
System.out.println("Innings # " + innings);
for(currentPlayer = 1; currentPlayer <=2; currentPlayer ++)
{
if(playerSequence)
{
name1 = playerOne;
name2 = playerTwo;
}
else
{
name1 = playerTwo;
name2 = playerOne;
}
System.out.print("Player #" + currentPlayer + " ");
// determine current player's name
if (currentPlayer == 1)
{
name = name1;
}
else
{
name = name2;
}
System.out.println("(" + name + ")");
System.out.println();
player1Total = sc.nextInt();
player2Total = sc.nextInt();
// add score to a global scoring of given player
if (currentPlayer == 1)
{
player1Total +=score;
}
else
{
player2Total +=score;
}
if (vehicleType != 0)
{
isCar = true;
colourNum = generator.nextInt(13);
score = colourNum;
vehicleType = generator.nextInt(10) + 1;
//return vehicleType >= 1 && vehicleType <= 9;
// add score by given colour to inning's score
scoreInning += score;
System.out.print(" car...");
if(colourNum == RED)
{
System.out.println("OUT!");
System.out.println("Total was " + scoreInning);
System.out.println("Current scores: ");
System.out.println(name1 + ": " + player1Total);
System.out.println(name2 + ": " + player2Total);
}
colour = "";
switch (colourNum)
{
case BLACK:
colour = "Black";
score = BLACK_CAR_VALUE;
break;
case BLUE:
colour = "Blue";
score = BLUE_CAR_VALUE;
break;
case CYAN:
colour = "Cyan";
score = CYAN_CAR_VALUE;
break;
case DARK_GREY:
colour = "Dark Grey";
score = DARK_GREY_CAR_VALUE;
break;
case GREY:
colour = "Grey";
score = GREY_CAR_VALUE;
break;
case GREEN:
colour = "Green";
score = GREEN_CAR_VALUE;
break;
case LIGHT_GREY:
colour = "Light Grey";
score = LIGHT_GREY_CAR_VALUE;
break;
case MAGENTA:
colour = "Magenta";
score = MAGENTA_CAR_VALUE;
break;
case ORANGE:
colour = "Orange";
score = ORANGE_CAR_VALUE;
break;
case PINK:
colour = "Pink";
score = PINK_CAR_VALUE;
break;
case RED:
colour = "Red";
//score = score + RED_CAR_VALUE;
break;
case WHITE:
colour = "White";
score = WHITE_CAR_VALUE;
break;
case YELLOW:
colour = "Yellow";
score = YELLOW_CAR_VALUE;
break;
}
}
else
{
if (colourNum == RED)
{
isCar = false;
System.out.print(" van/truck/bus/SUV...");
scoreInning += 6;
if (currentPlayer == 1)
{
player1Total += 6;
}
else
{
player2Total += 6;
}
System.out.println("6");
}
else
{
scoreInning += 1;
if (currentPlayer == 1)
{
player1Total += 1;
}
else
{
player2Total += 1;
}
System.out.println("1");
}
}
//Find the winner.
if (player1Total == player2Total)
{
System.out.println("Draw!");
}
else if (player1Total > player2Total)
{
avgScore1 = player1Total/playGame;
System.out.println(name1 + " (with avg " + avgScore1 + ") won");
}
else if (player1Total < player2Total)
{
avgScore2 = player2Total/playGame;
System.out.println(name2 + " (with avg " + avgScore2 + ") won");
}
}
}
}
}
}
You have a lot of unused variables, and I don't think it's running how you want. I suggest looking back in your textbook and re-reading the basics. They're fundamental to every program.
Re: Problem with running random class
Quote:
This is where my program stops
The Scanner method is waiting for you to enter a number.
Re: Problem with running random class
I have edited my original program but still having problems with the random method, it is choosoing its own numbers instead of the numbers I assigned to tthe colours, any hints on how I can fix this?
Re: Problem with running random class
Quote:
it is choosoing its own numbers instead of the numbers I assigned to tthe colours
Please explain and show what the code is doing. Add some printlns to print out what is happening.