Note that there are some explanatory texts on larger screens.

plurals
  1. POCreate a random within a range from an ArrayList within an Arraylist
    primarykey
    data
    text
    <p>I am at the end of my program here and Im trying to create a random number thats in an arraylist. I have the syntax below that Im using. I don't know how to write this, but I hope the code shows what I'm trying to accomplish. </p> <pre><code>import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class TriviaQuestionTester { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { File gameFile = new File("trivia.txt"); String nextLine, category; int cat1 = 0; int cat2 = 0; int cat3 = 0; int cat4 = 0; int cat5 = 0; int cat6 = 0; int random1, random2, random3, random4, random5, random6; int totalScore = 0; int awardedPoints = 200; String answer; Random random = new Random(); Scanner inFile = new Scanner(gameFile); Scanner scanner = new Scanner(System.in); ArrayList &lt;String&gt; myList = new ArrayList&lt;String&gt;(); //append @ sign to first index of arraylist when we copy the text file into it. first line will //be the first category. category = "@"+ inFile.nextLine(); //add category to arraylist myList.add(category); //while textfile has another line of input, write that line into the arraylist. while (inFile.hasNextLine()){ nextLine = inFile.nextLine(); //check if the next line is blank. if it is, advance to the next line (as it must be a category) and append @ sign //before copying it into the arraylist. if it is not, write the line into the arraylist. if(nextLine.equals("")){ category = "@"+ inFile.nextLine(); myList.add(category); } else { myList.add(nextLine); } } //close the text file from reading inFile.close(); System.out.println("Steve's Crazy Trivia Game!!!!" ); System.out.println(""); //find categories by searching the contents of every arraylist index and looking for the @ sign. //when you find that, assign that into the respective variable. int q = 1; for(int j = 0; j &lt; myList.size(); j++){ if(myList.get(j).contains("@")){ //System.out.println("Category found at " + j); if(q == 1){ cat1 = j; } if(q == 2){ cat2 = j; } if(q == 3){ cat3 = j; } if(q == 4){ cat4 = j; } if(q == 5){ cat5 = j; } if(q == 6){ cat6 = j; } q++; } } //first question //get category from variable, print it to user without the @ sign System.out.println("Category: " + myList.get(cat1).substring(1)); //generate a random number in a range 1 more than the index where the category is and 2 less than //where the next category is to get a question (always will be odd numbers) //Credit: Derek Teay random1 = random.nextInt(((cat2 - 2) - (cat1 + 1))) + (cat1 + 1); //debug code - shows the number generated //System.out.println("Random number: " + random1); //take the modulus of the random number. if there is a remainder, the number is odd, continue. //if there is not a remainder, number is even, generate a new number until the randomly generated //number is odd. while (random1 % 2 == 0){ random1 = random.nextInt(((cat2 - 2) - (cat1 + 1))) + (cat1 + 1); //debug code - shows the new random number if the first number isn't odd //System.out.println("New random number: " + random1); } //display the question to the user System.out.println("Question: " + myList.get(random1)); //accept user input System.out.print("Please type your answer: "); //store the user answer in a variable but lowercase answer = scanner.nextLine().toLowerCase(); System.out.println(); //display the officially correct answer from the arraylist //System.out.println("Answer: " + myList.get(random1 +1)); //if the user answer matches the official answer, tell them they're correct and award points - else //tell them they are incorrect // Display the officially correct answer from the arraylist String correctAnswer = myList.get(random1 +1); System.out.println("Answer: " + correctAnswer); // Instead use a variable // if the user answer matches the official answer, tell them they're // correct and award points // else tell them they suck LOL if(correctAnswer.equalsIgnoreCase(answer.trim())) { System.out.println("Correct!"); totalScore = totalScore + awardedPoints; System.out.println("You won " + awardedPoints); } else { System.out.println("You are incorrect"); } //display total accumulated points System.out.println("Your total points are: " + totalScore); //wait for user to hit any key before displaying the next question System.out.print("Hit Enter"); System.out.println(""); scanner.nextLine(); //second question //get category from variable, print it to user without the @ sign System.out.println("Category: " + myList.get(cat2).substring(1)); //generate a random number in a range 1 more than the index where the category is and 2 less than //where the next category is to get a question (always will be odd numbers) //Credit: Derek Teay random2 = random.nextInt(((cat3 - 2) - (cat2 + 1))) + (cat2 + 1); //take the modulus of the random number. if there is a remainder, the number is odd, continue. //if there is not a remainder, number is even, generate a new number until the randomly generated //number is odd. while (random2 % 2 == 0){ random2 = random.nextInt(((cat3 - 2) - (cat2 + 1))) + (cat2 + 1); } //display the question to the user System.out.println("Question: " + myList.get(random2 + 1)); //accept user input System.out.print("Please type your answer: "); //store the user answer in a variable but lowercase answer = scanner.nextLine().toLowerCase(); System.out.println(); //if the user answer matches the official answer, tell them they're correct and award points - else //tell them they are incorrect // Display the officially correct answer from the arraylist String correctAnswer1 = myList.get(random2 +1); System.out.println("Answer: " + correctAnswer1); // Instead use a variable // if the user answer matches the official answer, tell them they're // correct and award points // else tell them they suck LOL if(correctAnswer1.equalsIgnoreCase(answer.trim())) { System.out.println("Correct!"); totalScore = totalScore + awardedPoints; System.out.println("You won " + awardedPoints); } else { System.out.println("You are wrong again"); } //display total accumulated points System.out.println("Your total points are: " + totalScore); //wait for user to hit any key before displaying the next question System.out.print("Hit Enter"); System.out.println(""); scanner.nextLine(); //third question //get category from variable, print it to user without the @ sign System.out.println("Category: " + myList.get(cat3).substring(1)); //generate a random number in a range 1 more than the index where the category is and 2 less than //where the next category is to get a question (always will be odd numbers) //Credit: Derek Teay random3 = random.nextInt(((cat4 - 2) - (cat3 + 1))) + (cat3 + 1); //take the modulus of the random number. if there is a remainder, the number is odd, continue. //if there is not a remainder, number is even, generate a new number until the randomly generated //number is odd. while (random3 % 2 == 0){ random3 = random.nextInt(((cat4 - 2) - (cat3 + 1))) + (cat3 + 1); } //display the question to the user System.out.println("Question: " + myList.get(random3 + 1)); //accept user input System.out.print("Please type your answer: "); //store the user answer in a variable but lowercase answer = scanner.nextLine().toLowerCase(); System.out.println(); //if the user answer matches the official answer, tell them they're correct and award points - else //tell them they are incorrect // Display the officially correct answer from the arraylist String correctAnswer2 = myList.get(random3 +1); System.out.println("Answer: " + correctAnswer1); // Instead use a variable // if the user answer matches the official answer, tell them they're // correct and award points // else tell them they suck LOL if(correctAnswer2.equalsIgnoreCase(answer.trim())) { System.out.println("Correct!"); totalScore = totalScore + awardedPoints; System.out.println("You won " + awardedPoints); } else { System.out.println("Wow, you really stink"); } //display total accumulated points System.out.println("Your total points are: " + totalScore); //wait for user to hit any key before displaying the next question System.out.print("Hit Enter"); System.out.println(""); scanner.nextLine(); //fourth question //get category from variable, print it to user without the @ sign System.out.println("Category: " + myList.get(cat4).substring(1)); //generate a random number in a range 1 more than the index where the category is and 2 less than //where the next category is to get a question (always will be odd numbers) //Credit: Derek Teay random4 = random.nextInt(((cat5 - 2) - (cat4 + 1))) + (cat4 + 1); //take the modulus of the random number. if there is a remainder, the number is odd, continue. //if there is not a remainder, number is even, generate a new number until the randomly generated //number is odd. while (random4 % 2 == 0){ random4 = random.nextInt(((cat5 - 2) - (cat4 + 1))) + (cat4 + 1); } //display the question to the user System.out.println("Question: " + myList.get(random4 + 1)); //accept user input System.out.print("Please type your answer: "); //store the user answer in a variable but lowercase answer = scanner.nextLine().toLowerCase(); System.out.println(); //if the user answer matches the official answer, tell them they're correct and award points - else //tell them they are incorrect // Display the officially correct answer from the arraylist String correctAnswer3 = myList.get(random4 +1); System.out.println("Answer: " + correctAnswer3); // Instead use a variable // if the user answer matches the official answer, tell them they're // correct and award points // else tell them they suck LOL if(correctAnswer3.equalsIgnoreCase(answer.trim())) { System.out.println("Correct!"); totalScore = totalScore + awardedPoints; System.out.println("You won " + awardedPoints); } else { System.out.println("You are incorrect"); } //display total accumulated points System.out.println("Your total points are: " + totalScore); //wait for user to hit any key before displaying the next question System.out.print("Hit Enter"); System.out.println(""); scanner.nextLine(); //fifth question //get category from variable, print it to user without the @ sign //generate a random number in a range 1 more than the index where the category is and 2 less than //where the next category is to get a question (always will be odd numbers) //Credit: Derek Teay random5 = random.nextInt(((cat6 - 2) - ( cat5 + 1))) + (cat5 + 1); //take the modulus of the random number. if there is a remainder, the number is odd, continue. //if there is not a remainder, number is even, generate a new number until the randomly generated //number is odd. while (random5 % 2 == 0){ random5 = random.nextInt(((cat6 - 2) - (cat5 + 1))) + (cat5 + 1); } //display the question to the user System.out.println("Question: " + myList.get(random5 + 1)); //accept user input System.out.print("Please type your answer: "); //store the user answer in a variable but lowercase answer = scanner.nextLine().toLowerCase(); System.out.println(); //if the user answer matches the official answer, tell them they're correct and award points - else //tell them they are incorrect // Display the officially correct answer from the arraylist String correctAnswer4 = myList.get(random5 +1); System.out.println("Answer: " + correctAnswer4); // Instead use a variable // if the user answer matches the official answer, tell them they're // correct and award points // else tell them they suck LOL if(correctAnswer4.equalsIgnoreCase(answer.trim())) { System.out.println("Correct!"); totalScore = totalScore + awardedPoints; System.out.println("You won " + awardedPoints); } else { System.out.println("You are incorrect"); } //display total accumulated points System.out.println("Your total points are: " + totalScore); //wait for user to hit any key before displaying the next question System.out.print("Hit Enter"); System.out.println(""); scanner.nextLine(); //sixth question //get category from variable, print it to user without the @ sign System.out.println("Category: " + myList.get(cat6).substring(1)); //generate a random number in a range 1 more than the index where the category is and 2 less than //where the next category is to get a question (always will be odd numbers) //Credit: Derek Teay random6 = random.nextInt((cat6.maximum - cat6.minimum) + (cat6.minimum)); //take the modulus of the random number. if there is a remainder, the number is odd, continue. //if there is not a remainder, number is even, generate a new number until the randomly generated //number is odd. while (random6 % 2 == 0){ random6 = random.nextInt(((cat3 - 2) - (cat2 + 1))) + (cat2 + 1); } //display the question to the user System.out.println("Question: " + myList.get(random6 + 1)); //accept user input System.out.print("Please type your answer: "); //store the user answer in a variable but lowercase answer = scanner.nextLine().toLowerCase(); System.out.println(); //if the user answer matches the official answer, tell them they're correct and award points - else //tell them they are incorrect // Display the officially correct answer from the arraylist String correctAnswer5 = myList.get(random6 +1); System.out.println("Answer: " + correctAnswer5); // Instead use a variable // if the user answer matches the official answer, tell them they're // correct and award points // else tell them they suck LOL if(correctAnswer1.equalsIgnoreCase(answer.trim())) { System.out.println("Correct!"); totalScore = totalScore + awardedPoints; System.out.println("You won " + awardedPoints); } else { System.out.println("Did you even go to school?"); } //display total accumulated points System.out.println("Your total points are: " + totalScore); //wait for user to hit any key before displaying the next question System.out.print("Hit Enter"); System.out.println(""); scanner.nextLine(); } // TODO Auto-generated method stub } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload