JOptionPane variable might not have been initialized - java

I'm sorry the code is so long, I just need to know what I'm missing to initialize all my decisions. The compiler is complaining about my variable not being initialized. Thank you.
import javax.swing.JOptionPane;
public class SemesterProject
{
public static void main(String[] args)
{
String SemesterProject =
"Hello and welcome to Juans adventure story! Your choices throughout this story will bring your doom or your salvation!\n"+
"No one has been able to complete this story and lived to tell the tale, but maybe you will be the first one!.\n"+
"Our story begins in the small town of Badow. Many people in the town spread rumors of brave adventurers that\n"+
"go on the quest to solve the mysterious riddles of the abandond castle at the top of the hill.\n"+
"No one really knows who or what lies at the heart of the castle. Legend says that monsters guards the\n"+
"the many riches once owned by the family that died there, so many years ago.\n"+
"The Castle is full of dizzing turns and hidden corridors and dangerous monsters. Many adventureres \n"+
"have gone insane because of how they lose their way or go get stuck. It is the hardes quest known to man.\n"+
"The quest for you is to go to the castle, solve the riddles and claim the riches.\n"+
"The world will little note, nor long remember what we say here, but it can never forget what they did here.\n"+
"Be careful. Watch your back and always mark your trail because you never know what you will find next.\n"+
"If for some crazy reason you end up successful in this task, you will not only get the riches in the castle but\n"+
"you will also be crowned the king of the town of Badow. If you die, you lose.\n"+
"The last thing you have to do is input some of your personal information so that we keep you in our records.\n";
JOptionPane.showMessageDialog(null,SemesterProject);
String name = JOptionPane.showInputDialog(null,"Please give us your first name.");
String age = JOptionPane.showInputDialog(null,"Please give us your age.");
String weight = JOptionPane.showInputDialog(null,"Please give us your weight.");
String haircolor = JOptionPane.showInputDialog(null,"Please give us your hair color.");
String GPA = JOptionPane.showInputDialog(null,"Please give us your GPA.");
String favoritecolor = JOptionPane.showInputDialog(null,"Please give us your favorite color.");
String decision1,decision2,decision3,decision4,decision5,decision6;
decision1 = JOptionPane.showInputDialog("Brave adventurer, welcome to the entrance of the abandoned castle of town Badow. At this moment\n"+
"You have a choice right now to give up and take a walk of shame back to the village, and to safety\n"+
"Or you can decide to go in and test your unique set of skills on the various challenges of the adventure\n"+
"ahead of you. Enter the number of your choice.You can either 1. Enter the castle 2. Stay behind.");
if (decision1.equals("1"))
{
decision2 = JOptionPane.showInputDialog
("You find yourself at the entrance of the castle with a choice to go down a dark hall\n"+
"or to the closest room on the right side. Be vary wary the darkness can make you lose your mind and go insane and remember\n"+
"to keep track of were you are. 1. Into the room 2. Down the hall.");
}
else
{
JOptionPane.showMessageDialog(null,"You go back to your boring life in the town, you wont be remembered by anything and you\n"+
"lost your chance at getting the riches that lie deep in the castle. You lose.");
}
if (decision2.equals("1"))
{
decision3 = JOptionPane.showInputDialog
("You step into the room and find some medication and a lantern with some oil.\n"+
"you also find a sword. You can choose now to go back to the dark hallway or to go down a hidden trap door in the room. It could be\n"+
"a shortcut or it could lead somewhere dangerous. 1. Back down the hall 2. Take your chances with the trapdoor.");
}
else
{
JOptionPane.showMessageDialog(null,"you should have looked in the room, you quickly lose your way and the darkness\n"+
"makes you crazy.");
}
if (decision3.equals("1"))
{
decision4 = JOptionPane.showInputDialog
("You are back in the hall slowly hearing the echoing sound of your footsteps\n"+
"you head downstairs into what seems to be another hallway but this one full of barred rooms, kind of like a dungeon. There is\n"+
"a skeleton body on the ground which seems to be of another failure by an adventurer in the castle. You reach the end of the hall\n"+
"and there is two ways to go left or right. 1. Left 2. Right.");
}
else
{
JOptionPane.showMessageDialog(null,"You squeeze through the trapdoor and fall down to the ground where you find youself lost and disoriented\n"+
"You dont know where you are and start to panic, you start becoming insane and die.");
}
if (decision4.equals("1"))
{
decision5 = JOptionPane.showInputDialog
("You go left and hear a door open behind you, you panic and start to run\n"+
"you run intro different halls to try and escape but you trip. You just remembered that you have a sword with you and can now\n"+
"choose what to do 1. Take out sword and fight enemy 2. Get up and keep running.");
}
else
{
JOptionPane.showInputDialog(null,"You go right and get locked in behind you. You realize that there isnt anwhere to go\n"+
"and get lost in the darkest part of the castle and die alone.");
}
if (decision5.equals("1"))
{
decision6 = JOptionPane.showInputDialog
("You were able to fight of the armored enemy. But something tells you that that isnt the last of them. You continue on down the\n"+"hall and see from the distance to what seems to be your first prize. It cant be that easy.");
}
}
}

Define the decision variables as null. Instead of:
String decision1,decision2,decision3,decision4,decision5,decision6;
Define the variables as:
String decision1 = null;
String decision2 = null;
String decision3 = null;
String decision4 = null;
String decision5 = null;
String decision6 = null;

decision2 is only being set if decision1 is equal to 1. I think you want to put the if statements for the other decisions inside of each other like below:
if (decision1.equals("1"))
{
decision2 = JOptionPane.showInputDialog
("You find yourself at the entrance of the castle with a choice to go down a dark hall\n"+
"or to the closest room on the right side. Be vary wary the darkness can make you lose your mind and go insane and remember\n"+
"to keep track of were you are. 1. Into the room 2. Down the hall.");
if (decision2.equals("1"))
{
decision3 = JOptionPane.showInputDialog
("You step into the room and find some medication and a lantern with some oil.\n"+
"you also find a sword. You can choose now to go back to the dark hallway or to go down a hidden trap door in the room. It could be\n"+
"a shortcut or it could lead somewhere dangerous. 1. Back down the hall 2. Take your chances with the trapdoor.");
}
else
{
JOptionPane.showMessageDialog(null,"you should have looked in the room, you quickly lose your way and the darkness\n"+
"makes you crazy.");
}
}
else
{
JOptionPane.showMessageDialog(null,"You go back to your boring life in the town, you wont be remembered by anything and you\n"+
"lost your chance at getting the riches that lie deep in the castle. You lose.");
}

You must initialize your String variables (decision1, decision2,...) as:
String decision1 = null, decision2 = null, decision3 = null, decision4 = null, decision5 = null, decision6 = null;
Note that you don't get a compile error for decision1 because in the line
decision1 = JOptionPane.showInputDialog(...);
it is being initialized.
Also, your program's logic is bad. If decision1 is not 1, then you will just show a message, but the program will continue to check the next condition:
if (decision2.equals("1"))
where you will get a NullPointerException because you are comparing null with 1.

JOptionPane variable might not have been initialized
So keep in mind one thing that whenever you get such kind of error messages try to see that your variables are properly declared.
See when you try to use int variable it can give you error message if that variable is used in some computation. So try to initialize the variables like:
int a=0;
You can do the same thing with string variables also like:
String a=null;
Returning to answer
In your code you have just declared the variables , but the fact is that you have to actually initialize them.
Replace
String decision1,decision2,decision3,decision4,decision5,decision6;
By
String decision1=null,decision2=null,decision3=null,decision4=null,decision5=null,decision6=null;

Related

Eclipse android IndexOutOfBounds

currently i dont know what im doing wrong here is my sample code please help me
Problem:
02-28 03:41:51.750: E/AndroidRuntime(8431): java.lang.IndexOutOfBoundsException: Invalid index 95, size is 90
02-28 03:41:51.750: E/AndroidRuntime(8431): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
02-28 03:41:51.750: E/AndroidRuntime(8431): at com.example.finalpro.ThirdQuiz$1.onClick(ThirdQuiz.java:248
02-28 03:41:51.750: E/AndroidRuntime(8431): at com.example.finalpro.ThirdQuiz.showNextQuiz(ThirdQuiz.java:194)
02-28 03:41:51.750: E/AndroidRuntime(8431): at java.util.ArrayList.get(ArrayList.java:308)
Now my Java :
public class ThirdQuiz extends ActionBarActivity {
private TextView countLabel;
private TextView questionLabel;
private Button answerBtn1;
private Button answerBtn2;
private Button answerBtn3;
private Button answerBtn4;
private String rightAnswer;
private int rightAnswerCount = 0;
private int quizCount = 1;
static final private int QUIZ_COUNT = 25;
int quizCategory = 0;
ArrayList<ArrayList<String>> quizArray = new ArrayList<>();
String quizData[][] = {
// {"Country", "Right Answer", "Choice1", "Choice2", "Choice3"}
{"Feed me and I live, yet give me a drink and I die", "Fire"," Ice ","Hot","Cold"} ,
{"I fly without wings, I cry without eyes. What am I", " Clouds"," Rain ","Rainbow ","Sun"},
{"You can see me in water, but I never get wet. What am I?", " A reflection"," Mirror","Wall","BlackBoard"},
{"What belongs to you but others use it more than you do?", " Your name"," Your NickName","Your LastName"," Your UserName"},
{"What 4-letter word can be written forward, backward or upside down, and can still be read from left to right?", " NOON"," Moon","Four","Dead"},
{"What runs around the whole yard without moving?", " A fence"," Wall","Board"," Table"},
{"What kind of table can you eat?", " Vegetable"," Meat","Fruits"," Chicken"},
{"What's orange and sounds like a parrot?", " A carrot","Banana","Meat"," Potato"},
{"Which is the most curious letter?", " Y?","A?","B?"," X?"},
{"What does the big tomato say to the small tomato?", " Ketchup","Mang Thomas","Datu Puti","Silver Swan"},
{"What begins with T, ends with T and has T in it?", " Teapot","Team Potatot","Tilt","Talt"},
{"People buy me to eat, but never eat me. What am I?", "Plates and cuttlery","My Friends","Food","Junk Food"},
{"The more you take, the more you leave behind. What am I?", "Footsteps","Slow Motion","At the back","Hiding"},
{"A blue house has blue bricks; a yellow house has a yellow bricks. What is a green house made of?", "Glass","Grass","Wall","Door"},
{"Railroad crossing without any cars. Can you spell that without any R’s?", "Thats","Why","Where","How"},
{"What kind of dog keeps the best time?", "Watchdog","Watch Anime","Watch Cartoons","Watch Actions"},
{"You can do this with your friends. You can do this with your nose. But don't do it with your friend's nose!", "Pick","Touch","Watch","Move"},
{"What is it something that you always have but you always leave behind?", "Fingerprints","Footprints","Faceprints","Bodyprints"},
{"How can you physically stand behind your father while he is standing behind you?", "Stand back to back","Following me","Stay","Istalker"},
{"There was a plane crash every single person died. Who survived?", "Married couples","Single Parents","Single","RelationShip"},
{"What does no man want, yet no man want to lose?", "His job","His Family","Important to me"," His RelationShip"},
{"This company makes billions of dollars selling Windows.", "Microsoft","Google","PowerPoint"," Microsoft Office"},
{"What language does a billboard speak?", " Sign language"," Rain ","Rainbow ","Sun"} ,
{"What does this mean? Wondealicerland", "Alice in wonderland"," Batman ","Superman ","SpiderMan"} ,
{"Which ring is square?", "A boxing ring","Basketball Court ","Volleyball Court ","Class Room"} ,
{"What US state is surrounded by the most water?", "Hawaii"," Canada ","America ","Hongkong"} ,
{"Three times what number is no larger than two times that same number?", "0"," 2 ","4","6"} ,
{"Which of Santa's reindeer can you see in outer space?", "Comet"," Asteroid ","Meteors","Planet"} ,
{"What gets tighter when stretched?", "A budget"," Exercise ","Hungry","Waster"} ,
{"When set loose I fly away, Never so cursed As when I go astray.", "A fart"," hungry ","Hurry","Sleepy"} ,
{"Everyone has me but nobody can lose me. What am I?", "A shadow"," A friend ","Family","Enemy"} ,
{"Fashions change but what can a person wear that is never out of style?", "A smile"," Sad ","Angry","Ugly"},
{"A kind of tree can you carry in your hand?", "A palm"," Foot ","Ears","Touch"} ,
{"What can you catch but not throw?", "A cold"," Sad ","Angry","Ugly"} ,
{"What sits in a corner while travelling all around the world?", "Stamp"," Hi ","Signature","Messages"} ,
{"I'm flat when I'm new. I'm fat when you use me. I release my gas when something sharp touches me. What am I?", "A balloon"," Mirror","Picture","Selfie"},
{"I am a king who’s good at measuring stuff. What am I?", "Ruler"," Ball Pen ","Eraser","Pencil"},
{"Which word contains 26 letters but only three syllables?", "Alphabet"," Letters ","Spelling","Direction"} ,
{"What can you hear but not touch or see and yet control?", "Your voice"," Moving ","Stay","Go away"} ,
{"What did the thief get for stealing the calendar?", "12 Months"," 10 Months ","11 Months","8 Months"} ,
{"Before Mt. Everest was discovered as the highest mountain in the world, which mountain was the highest?", "Mt Everest"," Mt k2 ","Mt Makalu","Mr Panaslu"} ,
{"howers bring may flowers, what do may flowers bring?", "Pilgrims"," Ball Pen ","Eraser","Pencil"} ,
{"What did Adam say the day before Christmas?", "It's Christmas, Eve!"," New Year ","Birthday","Reunion"} ,
{"What kind of fish chases a mouse?", "Catfish"," Dog ","Horse","Bird"} ,
{"What has four legs, but can't walk?", "A table"," Board ","Chair","Pencil"} ,
{"What is always slow to come, but never actually happens?", "Tomorrow"," Yesterday ","Later","After Noon"} ,
{"If you blow past your destination, you'll have to throw your car into this."," Reverse ","Force","Move","Walk"},
{"What has a mouth but can't chew?", "River"," Road ","Air","Inside"} ,
{"David's father has three sons: Snap, Crackle, and ?","David"," Angel ","Mico","Klein"} ,
{"What has a ring, but no finger?", "Phone"," Laptop ","Computer","Tablet"},
{"You play with me at night before going to sleep. You can’t get caught fiddling with me at work. You only let a select few people touch me. What am I?","Phone","pillow","blanket","toys"},
{" What’s a four-letter word that ends in “k” and means the same as intercourse?","Talk","seek","peek","weak"},
{" I start with a “v” and every woman has one. She can even use me to get what she wants. What am I?","voice.","vase","vein","verse"},
{" I come in a lot of different sizes. Sometimes, I drip a little. If you blow me, it feels really good. What am I?","nose.","mout","ears","eyes"},
{".What’s in a man’s pants that you won’t find in a girl’s dress?","Pockets","stripes","buttons","zipper"},
{"You stick your poles inside me. You tie me down to get me up. I get wet before you do. What am I?","tent.","house","barbique","rope"},
{"What’s long and hard and has cum in it?","cucumber","egg plant","bittergourd","bottlegourd"},
{" If I miss, I might hit your bush. It’s my job to stuff your box. When I come, it’s news. What am I?","newspaperboy","reporter","tv","radio"},
{" What four-letter word begins with “f” and ends with “k,” and if you can’t get it you can always just use your hands?"," fork","fowk","feek","flak"},
{" All day long it’s in and out. I discharge loads from my shaft. Both men and women go down on me. What am I?","elevator","escalator","stairs","ladders"},
{"I’m spread out before being eaten. Your tongue gets me off. People sometimes lick my nuts. What am I?","Peanut butter.","jelly","ketchup","mayonnaise"},
{"Arnold Schwarzenegger’s is really long. Michael J. Fox’s is short. Daffy Duck’s isn’t human. Madonna doesn’t have one. What am I?","last name","first name","middle name","nickname"},
{"What is hard and hairy on the outside, soft and wet on the inside? The word begins with “c,” ends in “t,”.","coconut.","coat","cat","carrot"},
{"I start with a “p” and ends with “n” and I’m a major player in the film industry. What am I?","popcorn","person","penguin","putin"},
{"My business is briefs. I’m a cunning linguist. I plead and plead for it regularly. What am I?","lawyer","judge","police","governor"},
{"You get a lot of it if you’re powerful and successful, but significantly less when you’re just starting out. You sometimes do it with yourself, but it’s a lot better when you do it with another person. What am I talking about?","email","chat","text","mail"},
{"I have a stiff shaft. My tip penetrates. I come with a quiver. What am I?","arrow","javellin","bullet","rocket"},
{"I go in hard but come out soft, and I never mind if you want to blow me. What am I?","bubblegum","clay","paper","cement"},
{"What does a dog do that a man steps into?","pants","shorts","shirt","underwear"},
{"I’m great for protection. You use your fingers to get me off. What am I?","gloves","cloth","shield","ring"},
{"What gets longer if pulled, fits snugly between breasts, slides neatly into a hole, chokes people when used incorrectly, and works well when jerked?","seatbelt","belt","tie","sash"},
{"What’s beautiful and natural, but gets prickly if it isn’t trimmed regularly?","lawn","park","tree","hair"},
{"All men have one, but it’s longer on some than others. The Pope never uses his, and a man gives it to his wife once they’re married.","last name","first name","middle name","nickname"},
{"I assist with erections. Sometimes, giant balls hang from me. I’m known as a big swinger. What am I?","crane","wrecking ball","giant arm","hook"},
{"You find me in a guy’s pants. I’m about six inches long, I have a head, and some women love to blow me. What am I?","twenty dollar bill","credit card","check","ID"},
{"When I go in, I can cause some pain. I’ll fill your holes when you ask me to. I also ask that you spit, and not swallow. What am I?","dentist","Dermatologists ","Endocrinologists ","Colon and Rectal Surgeons "},
{"I grow in a bed, first white then red, and the plumper I get, the better women like me. What am I?","strawberry.","raspberries"," blueberries"," blackcurrants"},
{"I’m the highlight of many dates. I’m especially responsive when you put your fingers deep inside me. What am I?","bowling ball","basketball","baseball","soccer"},
{"What’s made of rubber, handed out at some schools, and exists to prevent mistakes?","Erasers","pencils","chalk","paper"},
{"I’m at least six inches long. I love it wet and foamy when I get to do my job. What am I?","toothbrush.","comb","brush","sponge"},
{"Over 1,000 people went down on me. I wasn’t a maiden for long. Something really big and hard ripped me open. What am I?","titanic","train to busan","snake on a plane","fast and furious"},
{"It’s a fun thing to do and you devote a significant amount of energy to thinking about it, but you hate knowing that your parents are doing it. What is it?","facebook","twitter","instagram","youtube"},
{"What’s most useful when it’s long and hard?","education","patience","relationship","trust"},
{"What’s white, sticky, and better to spit than to swallow?","toothpaste","glue","mayonnaise","milk"},
{"A lot of people like these to be as long as possible, but short ones can be effective, and it’s definitely possible for them to be too long. What are they?","tweets","cooments","reply","post"},
{"Name a word that’s four letters long, ends in “u-n-t” and is used to refer to some women?","aunt","uncle","grandmother","grandfather"},
{"What does a woman have two of the a cow has four of?","legs","arms","foot","toe"},
{"What goes up, lets out a load, and then goes back down?","elevator","bus","plane","rocket"},
{"If you put three fingers into these holes, it's gonna be a shocker. What am I talking about?","power outlet","window","bowlingball holes","ears"},
{"Some people prefer being on top, others prefer being on the bottom, and it always involves a bed.","bunk bed","floor","bedroom","bedrock"},
{"What goes naked to keep you warm?","sheep","cow","chicken","fish"},
{"What does a gay horse eat?","haaaay","grass","leaves","fish"},
{"If there is H2O on the inside of a fire hydrant, what is on the outside? ","K9P","CuTe","SiLi","h2"},
{"What word starts with ''c'' and ends with ''t'' and is synonymous with pussy?","cat","chicken","crow","cow"},
{"what is tall when it's young and short when old?","candle","pole","building","statue"},
};
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third_quiz);
countLabel = (TextView)findViewById(R.id.countLabel);
questionLabel = (TextView)findViewById(R.id.questionLabel);
answerBtn1 = (Button)findViewById(R.id.answerBtn1);
answerBtn2 = (Button)findViewById(R.id.answerBtn2);
answerBtn3 = (Button)findViewById(R.id.answerBtn3);
answerBtn4 = (Button)findViewById(R.id.answerBtn4);
Typeface font3 = Typeface.createFromAsset(getAssets(), "GrinchedRegular.otf");
countLabel.setTypeface(font3);
questionLabel.setTypeface(font3);
answerBtn1.setTypeface(font3);
answerBtn2.setTypeface(font3);
answerBtn3.setTypeface(font3);
answerBtn4.setTypeface(font3);
//Receive from StartuActivitu
quizCategory = getIntent().getIntExtra("QUIZ_CATEGORY",0);
Log.v("CATEGORY_TAG", quizCategory + "");
// Create quizArray from quizData.
for (int i = 0; i < quizData.length; i++) {
// Prepare array.
ArrayList<String> tmpArray = new ArrayList<>();
tmpArray.add(quizData[i][0]); // Country
tmpArray.add(quizData[i][1]); // Right Answer
tmpArray.add(quizData[i][2]); // Choice1
tmpArray.add(quizData[i][3]); // Choice2
tmpArray.add(quizData[i][4]); // Choice3
// Add tmpArray to quizArray.
quizArray.add(tmpArray);
}
showNextQuiz();
}
public void showNextQuiz() {
// Update quizCountLabel.
countLabel.setText("Q" + quizCount);
// Generate random number between 0 and 14 (quizArray's size - 1).
Random random = new Random();
int randomNum= 0;
if(quizCategory==0){
randomNum = random.nextInt(quizArray.size());
}
else if (quizCategory==1){
randomNum = random.nextInt(50 - 0) + 0 ;
}
else if (quizCategory==2){
randomNum= random.nextInt(100 - 50) + 50;
}
else {
randomNum= random.nextInt(150 - 100)+100;
}
// Pick one quiz set.
ArrayList<String> quiz = quizArray.get(randomNum);
// Set question and right answer.
// Array format: {"Country", "Right Answer", "Choice1", "Choice2", "Choice3"}
questionLabel.setText(quiz.get(0));
rightAnswer = quiz.get(1);
// Remove "Country" from quiz and Shuffle choices.
quiz.remove(0);
Collections.shuffle(quiz);
// Set Choices.
answerBtn1.setText(quiz.get(0));
answerBtn2.setText(quiz.get(1));
answerBtn3.setText(quiz.get(2));
answerBtn4.setText(quiz.get(3));
// Remove this quiz from quizArray.
quizArray.remove(randomNum);
}
public void checkAnswer(View view) {
// Get pushed button.
Button answerBtn = (Button) findViewById(view.getId());
String btnText = answerBtn.getText().toString();
String alertTitle;
if (btnText.equals(rightAnswer)) {
// Correct!
alertTitle = "Correct!";
rightAnswerCount++;
} else {
// Wrong...
alertTitle = "Wrong...";
}
// Create Dialog.
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(alertTitle);
builder.setMessage("Answer : " + rightAnswer);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialogInterface, int i) {
if (quizCount == QUIZ_COUNT) {
// Show Result.
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);
startActivity(intent);
} else {
quizCount++;
showNextQuiz();
}
}
});
builder.setCancelable(false);
builder.show();
}
}
Lastly let me add that i havent put the last details on index 100-150 our if fits realy index sorry if im stupid or sound stupid im fairly new ot this im really sorry.

k.next statement [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
Here is my choose your own adventure project. There are no issues, apart after choosing this set of options (you don't have to read the whole thing):
1.name
2.no
3.hide, it asks you to input another answer.
It does not matter what you put in, the second time, as it will still run the program according to "hide". Just wondering why this is showing up. Also, feel free to enjoy my game.
import java.util.Scanner;
public class BEproject1V2 {
public static void main(String[] args) {
Scanner k = new Scanner(System. in );
String C1, C2, C2a, C3, C3a, C3b, C3c;
System.out.println("Ya arr a captain pirate on these high seas! Aboard the ship that yar father made, the M.M. Big Boy.");
System.out.println("First order of business, is choosing your Pirate Name! What is yarr real name?");
String name = k.nextLine();
String Pn = "Capn Cornelious Coxswain, The Hatless";
///Start of story
System.out.println("Scupper that sailor! We'll call you " + Pn);
System.out.println("Arr ye wondering why yer called Hatless? You have NO hats. So little amounts of hats. Literally 0 hats.");
System.out.println("Yee and yer crew be lookin for any booty to steal, as well as gold and treasure!");
System.out.println("'Look smartly Sir!' yells one of yer sailors. 'A darkness approaches starboard!'.");
System.out.println("You look round the deck as yer biggest fear comes to life. A giant squid begins to wrestle the ship!");
System.out.println("The crew starts to panic as the ship gets dragged into the water. 'Show a leg boys!' is the last thing you say before being dragged into the darkness.");
System.out.println("She be lookin like the end for ol' " + Pn + ", until a giant sea turtle swims up to ye.");
System.out.println("'I am King Randy Myrtle, The Friendly Sea Turtle.' Says Randy. 'I can take you to an island, climb aboard!'");
System.out.println("Do you climb aboard King Randy Myrtle, The Friendly Sea Turtle? (Yes or No)");
////First choice "Yes"
C1 = k.next();
if (C1.equalsIgnoreCase("yes")) {
System.out.println("King Randy takes you to the surface. 'I know of two Islands, the first being the Island of the screaming crabs,");
System.out.println("or the Island of the Pun Telling Trees. which would you like to go to?' (Crab or Tree)");
////Second choice "Crab"
C2 = k.next();
if (C2.equalsIgnoreCase("Crab")) {
System.out.println("'Okay! Here we go!'. King Randy takes off towards a distant land. You come about to a crab staring you dead in the face.");
System.out.println("'Blast', you think to yourself. Ye see the crab take a lung of breath, waiting for the worst screamin crab ever recorded.");
System.out.println("'CAPN CORNELIOUS COXSWAIN, THE HATLESS!'. The crab repeats, as it starts pinching your nose. Angered and afraid, you pick up a nearby rock.");
System.out.println("Do you 'throw' the rock, or 'wait' for the crab to scream again?");
////Third choice "Throw"
C3 = k.next();
if (C3.equalsIgnoreCase("Throw")) {
System.out.println("You throw the rock somewhere in the distance. Why wouldn't you you aim it at the crab?");
System.out.println("Now you're defenseless, and an idiot in the eyes of crabs. GAME OVER.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice else "Wait"
else if (C3.equalsIgnoreCase("Wait")) {
System.out.println("You wait, and the crab starts screaming again. You notice that the tones ");
System.out.println("are in a pattern, so you sing along. The beautiful harmonies intrigue ");
System.out.println("the rest of the crabs, who then celebrate your presence. You win the island!");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
}
////Second Choice else "Tree"
else if (C2.equalsIgnoreCase("Tree")) {
System.out.println("'Fantastic choice!' says Randy. He takes you to the island, where you hear lots of moans and small chuckles. You reach the sand, and walk up to a line of trees.");
System.out.println("'Is that a pirate over there?' asks one of the trees. 'Yes I think so! Hey I heard they were really good singers!' incorrectly states another.");
System.out.println("'Why is that?' you ask. 'Because they can always hit the HIGH C'S!!' says the tree, bursting with laughter. 'I guess that's a little funny' you mumble to yourself.");
System.out.println("'Oh you're in for a real TREEt then Cap'n! I have one for you.'Why should you pull your plate closer while eating spaghetti?' asks the tree. Do you answer? (Yes or no)");
////Third Choice 2 "Yes"
C3a = k.next();
if (C3a.equalsIgnoreCase("yes")) {
System.out.println("'So you don't spill any of it?' you say, immediately regretting your answer. You know that the tree is staring at you, even if it doesn't have eyes.");
System.out.println("'That was MY PUN.' exclaims the tree. 'NOW YOU WILL NEVER KNOW THE ANSWER, and are BANISHED from my PUNS, STINKy pirate.' Knowing you will never hear the pun, fills you with sadness. ");
System.out.println("Your eyes begin to sting, and you start shedding tears of soy. GAME OVER.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 2 else "No"
else if (C3a.equalsIgnoreCase("no")) {
System.out.println("'Hm I'm not sure!' you say. The tree chuckles harmoniously. 'So you'll get less-on-ya! HAHAHAHA!'. After contemplating your death from this joke, you decide to laugh with the tree.");
System.out.println("Knowing that you will be great friends, fills you with determination. YOU WIN!");
System.out.println("Thank you for playing my adventure, press run to play again.");
} else {
System.out.println("That is not an option. Please hit \"run\" to try again.");
}
}
}
////First Choice else "No"
else if (C1.equalsIgnoreCase("no")) {
System.out.println("'Well, SORRY for asking then.' says Randy. He swims away. Now you are sinking into the abyss. It doesn't look too good. When you look up, there is ");
System.out.println("a shark and it's eating your mates! You look up and see a raft, you look down and see a little cave you could hide in. Do you 'swim', or 'hide'?");
////Second Choice 2 "Raft"
C2a = k.next();
if (C2a.equalsIgnoreCase("swim")) {
System.out.println("You begin to swim, and the shark chases right after you! You are able to avoid it, and make it to the raft. You look down and see that the shark is not chasing you, ");
System.out.println("but being chased himself! A blue whale swallows the shark whole as he screams for his wife. You see a paddle out in the water, do you try to 'grab' it before Moby Dick himself ");
System.out.println("consumes you? Or do you 'stay' on the raft?");
}
////Third Choice 3 "Grab"
C3b = k.next();
if (C3b.equalsIgnoreCase("grab")) {
System.out.println("You lunge for the paddle! Now is your time, and you start swimming faster and harder than ever before. You reach for it and - you got it! As you start to swim towards ");
System.out.println("the raft. You make it, and start paddling to a nearby island. From where you are, you think you can hear a mixture of screaming and laughing... YOU WIN!");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 3 "Stay"
else if (C3b.equalsIgnoreCase("stay")) {
System.out.println("You decide to stay on the raft. Good choice, that paddle looked real dangerous. The whale can not get close enough due to the wreckage to attack you.");
System.out.println("In a fit of fury, the whale breaches the water and says 'Caw! Caw!'. The whale then starts to fly! He is getting a LOT of air, but he is coming your way. ");
System.out.println("You realize that there is nothing you can do but watch the beauty of the whale come crashing down onto you. 'Take me as I am' are the last words to leave " + Pn + "'s mouth. THE END.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 4 "Swim"
else if (C2a.equalsIgnoreCase("hide")) {
System.out.println("You swim to the nearby cave. Inside is a beautiful mermaid. 'Hello' says the mermaid. You lean in to say hi, but you trip on a big, glossy, wet stack of the movie ");
System.out.println("'The Ocean of Trumpets'. There is at least sixty of them. 'Sorry!' you exclaim. 'Oh, that's okay. You've just stepped on my big, glossy, wet stack of my favorite movie, ");
System.out.println("'The Ocean of Trumpets'. Say, how many do you think I have?'. The wetness of the DVD's entice you. You read the layout of the cave, and realize ");
System.out.println("that you could EASILY run away and STEAL a DVD. So, would you like to take a 'guess', or take a 'DVD'?");
//// Third Choice 5 "60"
C3c = k.next();
if (C3c.equalsIgnoreCase("DVD")) {
System.out.println("You start screaming the tune of 'We Are The Champions' to distract the mermaid. It serenades her into a deep slumber. You STEAL a DVD, Indiana Jones style. However, ");
System.out.println("you have not brought anything to replace the DVD with. The entire cave begins to rumble, and you are suddenly about to be crushed by a rolling boulder, also ");
System.out.println("Indiana Jones style! The only difference is you get crushed by the boulder, THE END.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 6 "guess"
else if (C3c.equalsIgnoreCase("guess")) {
System.out.println("Please insert your guess into me! (Number)");
int num = k.nextInt();
double bignum = Math.PI * Math.pow(num, 2);
System.out.println("'Hmmm my guess is " + num + "!'. 'So close!' says the mermaid. But the answer is actually " + bignum + "! I'm sorry but you aren't qualified to touch my DVD's.'");
System.out.println(" You gaze at the wet pile of DVD's and cry tears of soy. When it hits the water, you realize what your life has become. Seeing that murky reflection fills ");
System.out.println("you with sadness. GAME OVER.");
System.out.println("Thank you for playing my adventure, press run to play again.");
} else {
System.out.println("That is not an option. Please run again.");
}
}
}
}
}
I believe this is how you wanted it to run:
Ya arr a captain pirate on these high seas! Aboard the ship that yar father made, the M.M. Big Boy.
First order of business, is choosing your Pirate Name! What is yarr real name?
:me me big boy
Scupper that sailor! We'll call you Capn Cornelious Coxswain, The Hatless
Arr ye wondering why yer called Hatless? You have NO hats. So little amounts of hats. Literally 0 hats.
Yee and yer crew be lookin for any booty to steal, as well as gold and treasure!
'Look smartly Sir!' yells one of yer sailors. 'A darkness approaches starboard!'.
You look round the deck as yer biggest fear comes to life. A giant squid begins to wrestle the ship!
The crew starts to panic as the ship gets dragged into the water. 'Show a leg boys!' is the last thing you say before being dragged into the darkness.
She be lookin like the end for ol' Capn Cornelious Coxswain, The Hatless, until a giant sea turtle swims up to ye.
'I am King Randy Myrtle, The Friendly Sea Turtle.' Says Randy. 'I can take you to an island, climb aboard!'
Do you climb aboard King Randy Myrtle, The Friendly Sea Turtle? (Yes or No)
:no
'Well, SORRY for asking then.' says Randy. He swims away. Now you are sinking into the abyss. It doesn't look too good. When you look up, there is
a shark and it's eating your mates! You look up and see a raft, you look down and see a little cave you could hide in. Do you 'swim', or 'hide'?
:hide
You swim to the nearby cave. Inside is a beautiful mermaid. 'Hello' says the mermaid. You lean in to say hi, but you trip on a big, glossy, wet stack of the movie
'The Ocean of Trumpets'. There is at least sixty of them. 'Sorry!' you exclaim. 'Oh, that's okay. You've just stepped on my big, glossy, wet stack of my favorite movie,
'The Ocean of Trumpets'. Say, how many do you think I have?'. The wetness of the DVD's entice you. You read the layout of the cave, and realize
that you could EASILY run away and STEAL a DVD. So, would you like to take a 'guess', or take a 'DVD'?
If yes, your problem was that you had your Third choice outside your check for the Second choice C2a.equalsIgnoreCase("swim"), and you put your else after C3b.equalsIgnoreCase("stay"). This caused your program to check if the second choice is swim, if yes print your text, else just take the third choice without printing. By placing the third choice into the second choice swim block, and fixing the else (C2a.equalsIgnoreCase("hide")) it runs correctly.
Scanner k = new Scanner(System.in);
String C1, C2, C2a, C3, C3a, C3b, C3c;
System.out.println("Ya arr a captain pirate on these high seas! Aboard the ship that yar father made, the M.M. Big Boy.");
System.out.println("First order of business, is choosing your Pirate Name! What is yarr real name?");
String name = k.nextLine();
String Pn = "Capn Cornelious Coxswain, The Hatless";
///Start of story
System.out.println("Scupper that sailor! We'll call you " + Pn);
System.out.println("Arr ye wondering why yer called Hatless? You have NO hats. So little amounts of hats. Literally 0 hats.");
System.out.println("Yee and yer crew be lookin for any booty to steal, as well as gold and treasure!");
System.out.println("'Look smartly Sir!' yells one of yer sailors. 'A darkness approaches starboard!'.");
System.out.println("You look round the deck as yer biggest fear comes to life. A giant squid begins to wrestle the ship!");
System.out.println("The crew starts to panic as the ship gets dragged into the water. 'Show a leg boys!' is the last thing you say before being dragged into the darkness.");
System.out.println("She be lookin like the end for ol' " + Pn + ", until a giant sea turtle swims up to ye.");
System.out.println("'I am King Randy Myrtle, The Friendly Sea Turtle.' Says Randy. 'I can take you to an island, climb aboard!'");
System.out.println("Do you climb aboard King Randy Myrtle, The Friendly Sea Turtle? (Yes or No)");
////First choice "Yes"
C1 = k.next();
if (C1.equalsIgnoreCase("yes")) {
System.out.println("King Randy takes you to the surface. 'I know of two Islands, the first being the Island of the screaming crabs,");
System.out.println("or the Island of the Pun Telling Trees. which would you like to go to?' (Crab or Tree)");
////Second choice "Crab"
C2 = k.next();
if (C2.equalsIgnoreCase("Crab")) {
System.out.println("'Okay! Here we go!'. King Randy takes off towards a distant land. You come about to a crab staring you dead in the face.");
System.out.println("'Blast', you think to yourself. Ye see the crab take a lung of breath, waiting for the worst screamin crab ever recorded.");
System.out.println("'CAPN CORNELIOUS COXSWAIN, THE HATLESS!'. The crab repeats, as it starts pinching your nose. Angered and afraid, you pick up a nearby rock.");
System.out.println("Do you 'throw' the rock, or 'wait' for the crab to scream again?");
////Third choice "Throw"
C3 = k.next();
if (C3.equalsIgnoreCase("Throw")) {
System.out.println("You throw the rock somewhere in the distance. Why wouldn't you you aim it at the crab?");
System.out.println("Now you're defenseless, and an idiot in the eyes of crabs. GAME OVER.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice else "Wait"
else if (C3.equalsIgnoreCase("Wait")) {
System.out.println("You wait, and the crab starts screaming again. You notice that the tones ");
System.out.println("are in a pattern, so you sing along. The beautiful harmonies intrigue ");
System.out.println("the rest of the crabs, who then celebrate your presence. You win the island!");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
}
////Second Choice else "Tree"
else if (C2.equalsIgnoreCase("Tree")) {
System.out.println("'Fantastic choice!' says Randy. He takes you to the island, where you hear lots of moans and small chuckles. You reach the sand, and walk up to a line of trees.");
System.out.println("'Is that a pirate over there?' asks one of the trees. 'Yes I think so! Hey I heard they were really good singers!' incorrectly states another.");
System.out.println("'Why is that?' you ask. 'Because they can always hit the HIGH C'S!!' says the tree, bursting with laughter. 'I guess that's a little funny' you mumble to yourself.");
System.out.println("'Oh you're in for a real TREEt then Cap'n! I have one for you.'Why should you pull your plate closer while eating spaghetti?' asks the tree. Do you answer? (Yes or no)");
////Third Choice 2 "Yes"
C3a = k.next();
if (C3a.equalsIgnoreCase("yes")) {
System.out.println("'So you don't spill any of it?' you say, immediately regretting your answer. You know that the tree is staring at you, even if it doesn't have eyes.");
System.out.println("'That was MY PUN.' exclaims the tree. 'NOW YOU WILL NEVER KNOW THE ANSWER, and are BANISHED from my PUNS, STINKy pirate.' Knowing you will never hear the pun, fills you with sadness. ");
System.out.println("Your eyes begin to sting, and you start shedding tears of soy. GAME OVER.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 2 else "No"
else if (C3a.equalsIgnoreCase("no")) {
System.out.println("'Hm I'm not sure!' you say. The tree chuckles harmoniously. 'So you'll get less-on-ya! HAHAHAHA!'. After contemplating your death from this joke, you decide to laugh with the tree.");
System.out.println("Knowing that you will be great friends, fills you with determination. YOU WIN!");
System.out.println("Thank you for playing my adventure, press run to play again.");
} else {
System.out.println("That is not an option. Please hit \"run\" to try again.");
}
}
}
////First Choice else "No"
else if (C1.equalsIgnoreCase("no")) {
System.out.println("'Well, SORRY for asking then.' says Randy. He swims away. Now you are sinking into the abyss. It doesn't look too good. When you look up, there is ");
System.out.println("a shark and it's eating your mates! You look up and see a raft, you look down and see a little cave you could hide in. Do you 'swim', or 'hide'?");
////Second Choice 2 "Raft"
C2a = k.next();
if (C2a.equalsIgnoreCase("swim")) {
System.out.println("You begin to swim, and the shark chases right after you! You are able to avoid it, and make it to the raft. You look down and see that the shark is not chasing you, ");
System.out.println("but being chased himself! A blue whale swallows the shark whole as he screams for his wife. You see a paddle out in the water, do you try to 'grab' it before Moby Dick himself ");
System.out.println("consumes you? Or do you 'stay' on the raft?");
////Third Choice 3 "Grab"
C3b = k.next();
if (C3b.equalsIgnoreCase("grab")) {
System.out.println("You lunge for the paddle! Now is your time, and you start swimming faster and harder than ever before. You reach for it and - you got it! As you start to swim towards ");
System.out.println("the raft. You make it, and start paddling to a nearby island. From where you are, you think you can hear a mixture of screaming and laughing... YOU WIN!");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 3 "Stay"
else if (C3b.equalsIgnoreCase("stay")) {
System.out.println("You decide to stay on the raft. Good choice, that paddle looked real dangerous. The whale can not get close enough due to the wreckage to attack you.");
System.out.println("In a fit of fury, the whale breaches the water and says 'Caw! Caw!'. The whale then starts to fly! He is getting a LOT of air, but he is coming your way. ");
System.out.println("You realize that there is nothing you can do but watch the beauty of the whale come crashing down onto you. 'Take me as I am' are the last words to leave " + Pn + "'s mouth. THE END.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
}
////Third Choice 4 "Swim"
if (C2a.equalsIgnoreCase("hide")) {
System.out.println("You swim to the nearby cave. Inside is a beautiful mermaid. 'Hello' says the mermaid. You lean in to say hi, but you trip on a big, glossy, wet stack of the movie ");
System.out.println("'The Ocean of Trumpets'. There is at least sixty of them. 'Sorry!' you exclaim. 'Oh, that's okay. You've just stepped on my big, glossy, wet stack of my favorite movie, ");
System.out.println("'The Ocean of Trumpets'. Say, how many do you think I have?'. The wetness of the DVD's entice you. You read the layout of the cave, and realize ");
System.out.println("that you could EASILY run away and STEAL a DVD. So, would you like to take a 'guess', or take a 'DVD'?");
//// Third Choice 5 "60"
C3c = k.next();
if (C3c.equalsIgnoreCase("DVD")) {
System.out.println("You start screaming the tune of 'We Are The Champions' to distract the mermaid. It serenades her into a deep slumber. You STEAL a DVD, Indiana Jones style. However, ");
System.out.println("you have not brought anything to replace the DVD with. The entire cave begins to rumble, and you are suddenly about to be crushed by a rolling boulder, also ");
System.out.println("Indiana Jones style! The only difference is you get crushed by the boulder, THE END.");
System.out.println("Thank you for playing my adventure, press run to play again.");
}
////Third Choice 6 "guess"
else if (C3c.equalsIgnoreCase("guess")) {
System.out.println("Please insert your guess into me! (Number)");
int num = k.nextInt();
double bignum = Math.PI * Math.pow(num, 2);
System.out.println("'Hmmm my guess is " + num + "!'. 'So close!' says the mermaid. But the answer is actually " + bignum + "! I'm sorry but you aren't qualified to touch my DVD's.'");
System.out.println(" You gaze at the wet pile of DVD's and cry tears of soy. When it hits the water, you realize what your life has become. Seeing that murky reflection fills ");
System.out.println("you with sadness. GAME OVER.");
System.out.println("Thank you for playing my adventure, press run to play again.");
} else {
System.out.println("That is not an option. Please run again.");
}
}
}
I hope this is what you wanted.

End the Game from a separate method

I have two different classes: TextBasedGame and IntroductionChoices.
IntroductionChoices makes all the decisions while TextBasedGame basically just prints the story (it's the one with the main method).
What I want to know is how to make the game END if the user makes a wrong choice.
In this case, if the user types in "Take down the group.", a message is displayed and the game ends. In my case, in the main method, it just keeps on going. How do I stop the game from running?
I was thinking I could somehow, in the main method, check if return from IntroductionChoicesis "GAME OVER" and end the game there.
//Snippet from the main method
System.out.println("What do you do?");
System.out.println(choice.choice1());
System.out.println("Next part...");
//Method choice1 from IntroductionChoices
public static String choice1()
{
Scanner scan = new Scanner(System.in);
System.out.println("Warn her of her shadows.");
System.out.println("Take down the group.");
String decision = scan.next();
if (decision.equalsIgnoreCase("right decision"))
{
System.out.println("some text");
return "some more text in continuation to continue story in main";
}
else if (decision.equalsIgnoreCase("wrong decision"))
{
System.out.println("You creep towards the men, hoping to surprise them from behind.");
System.out.println("Consequence");
return "GAME OVER";
}
else
{
return "That is not a valid response.";
}
}
System.exit(0)
else if (decision.equalsIgnoreCase("wrong decision"))
{
System.out.println("You creep towards the men, hoping to surprise them from behind.");
System.out.println("Consequence");
System.exit(0);
You won't need to return anything, it will end the program.
OR
Give the user an option:
Start new game-> start a new game
Quit -> System.exit(0)
I'd also use a switch to check through the user options, you're less liekly to make mistakes and it can be neater and quicker when the options start accumulating.
You can create an enum of options or use final ints with meaningful names so your code is easier to navigate and then match with user options.
From java the docs.

If and if else again

The problem I seem to be having is that I am unsure on how to make the program recognize if the player is in one of the "MVP" positions (C,SS,CF) before moving forward with my program logic.
These three positions qualify for "MVP" status only if their OPS is above 800 for everyone else, it has to be 900 or above to be considered for "MVP".
Once again, I am having trouble with the "if" and "if else" statement.
Again, This IS school given problem and I don't want the answer. Only insight into what I am doing wrong. I want to learn this not have it done for me. Thank you in advance.
import java.util.Scanner;
public class baseBall {
public static void main(String[] args) {
/* A good part of a baseball player's offensive value is captured by the
statistic OPS - the sum of the player's on base percentage and slugging
percentage. An MVP candidate will typically have an OPS above 900,
however if they play a difficult defensive position (catcher, shortstop, or center field)
then they are an MVP candidate if their OPS is above 800. Write a program that will prompt the user for
a player's name, their on base percentage, slugging percentage, and defensive position and report whether the player is an MVP candidate*/
Scanner input = new Scanner(System.in);
System.out.println("Please enter players name: ");
String name = input.next();
System.out.println("Please enter On Base Percentage: ");
double Obp = input.nextDouble();
System.out.println("Please enter slugging Percentage: ");
double Slg = input.nextDouble();
System.out
.println("Please enter position (P,C,1B,2B,3B,SS,LF,CF,RF): ");
String ball = input.next();
String position;
double Ops = Obp + Slg;
if ( position.equalsIgnoreCase("ss")){
if (position.equalsIgnoreCase("cf")){
if (position.equalsIgnoreCase("c")){
System.out.println("MVP Candidate!");
else
System.out.println("NOT an MVP Candidate!);
}
}
}
}
}
Try doing it without nested IFs. Instead, try using Boolean operators like AND and OR.
As previously stated try using a paper first. Try drawing a decision tree to see what and where it might be going wrong.
Your code is checking if the player position is c AND ss AND cf. But the player will be only in one position, it can't be in all the three, so your code will always print "Not an MVP Candidate!".
To make it simple your code is checking if the position is c AND ss AND CF, instead you want to check if the position is c OR ss OR cf.
So you have to use the conditional operator OR -> ||:
if(position.equalsIgnoreCase("ss") || position.equalsIgnoreCase("cf") || position.equalsIgnoreCase("c") {
System.out.println("MVP Candidate!");
} else {
System.out.println("NOT an MVP Candidate!);
}
Your nested ifs will never be true. Think about this logically and on paper.
If position equals ss how can it equal cf and c at the same time? Always ask yourself: "does this make sense?" -- do this before committing code to screen and you'll be golden.
As a side recommendation, please get rid of those distracting // from your question text. They serve no purpose other than to annoy.

Trying to get a random element from an array so that I can mark it as "booked"

This is what I have in my method to randomly select a element in my array, however I'm not sure why it isn't working, I feel like I have tried every way of writing it, any ideas.
public static Seat BookSeat(Seat[][] x){
Seat[][] book = new Seat[12][23];
if (x != null){
book = x[(Math.random()*x.length)];
}
return book;
}
The way you explain things makes me think a couple of concepts somehow got crosswired. I am assuming that book is some (2 dimensional) array of Seat objects from which you want to pick a random one. In order to do so, you need to specify a random choice for each dimension of the array:
// this should be declared elsewhere because if it's local to bookSeat it will be lost
// and reinitialized upon each call to bookSeat
Seat[][] book = new Seat[12][23];
// and this is how, after previous declaration, the function will be called
Seat theBookedSeat = bookSeat(book);
// Okay, now we have selected a random seat, mark it as booked, assuming Seat has a
// method called book:
theBookedSeat.book();
// and this is the modified function. Note also that function in Java by convention
// start with a lowercase letter.
public static Seat bookSeat(Seat[][] x){
if (x != null){
// using Random as shown by chm052
Random r = new Random();
// need to pick a random one in each dimension
book = x[r.nextInt(x.length)][r.nextInt(x[0].length)];
}
return book;
}
You should also integrate a test to check whether the selected seat was already booked and repeat the selection:
do {
// need to pick a random one in each dimension
book = x[r.nextInt(x.length)][r.nextInt(x[0].length)];
while (book.isBooked()); // assuming a getter for a boolean indicating
// whether the seat is booked or not
But a full-random selection like this has a couple of disadvantages:
the selection being random, you can repeatedly fall on already booked seats, and the chances that happens increase with the number of already booked seats. But even with few booked seats you could be really unlucky and see the loop spin around tens of times before it hits an unbooked seat.
you should absolutely test whether there are still unbooked seats left before entering the loop or it will spin indefinitely.
Therefore it might be a good idea to implement a smarter selection routine, eg by randomly picking a row and a seat and start searching from there until the first free seat is encountered, but for first steps this one should do just fine.
I hope this is what you wanted to achieve, if not feel free to comment and allow me to correct and adapt.
Floor the number returned by the (Math.random()*x.length) expression.
Math.floor(Math.random()*x.length);
At the moment, you're trying to subscript the array with a floating point number.
The other answer will totally work, but here is another way of doing it using Random.nextInt() if you don't want to have to do all the mathing around:
Random r = new Random();
book = x[r.nextInt(x.length)];
It uses java.util.Random, so make sure you import that if you do this.

Categories