创建文本文件后,程序在第一行后停止。不知道为什么,需要帮助

时间:2016-04-01 20:24:07

标签: java arrays arraylist crash text-files

我必须为一个项目制作一个测验游戏,程序在第12行后停止。任何人都知道为什么?代码中有注释来理解它,基本上程序只是停止,但是当它到达第12行代码并且我无法理解为什么时不会关闭。你们中的任何一个人都可以帮忙吗?我很确定其余部分都没问题。谢谢。另外,只打印1或2的打印语句只是检查程序停止的位置,它甚至没有到达第一个。

import java.io.*;
import java.util.Scanner;
import java.util.ArrayList;

public class Quiz{

  public static void main (String[] args) throws IOException{

    Scanner keyboard = new Scanner(System.in);
    QuizFile quizFile = new QuizFile();

    quizFile.createQuestions();
    System.out.println("hi");
    System.out.println("1");
    //opens the file
    File file = new File("Questions.txt");
        Scanner inputFile = new Scanner(file);
    System.out.println("2");
    String line;
    //creates the ArrayList
    ArrayList<String> listOfQuestions = new ArrayList<String>();

        int lineCounter = 0;
    //counts how many lines there are in the file
    while(inputFile.hasNextLine()){
      lineCounter++;
    }
    System.out.println("3");

    //adds the quesitons in the file to the ArrayList by reading specific lines to the list
    for (int lineIndex = 1; lineIndex <= lineCounter; lineIndex++){
      if (lineIndex == 1){
        line = inputFile.nextLine();
        listOfQuestions.add(line);
      }
      if (lineIndex == 10){
        line = inputFile.nextLine();
        listOfQuestions.add(line);
      }
      if (lineIndex == 18){
        line = inputFile.nextLine();
        listOfQuestions.add(line);
      }
      if (lineIndex == 27){
        line = inputFile.nextLine();
        listOfQuestions.add(line);
      }
      if (lineIndex == 36){
        line = inputFile.nextLine();
        listOfQuestions.add(line);
      }
      else{
        line = inputFile.nextLine();
      }
    }
    System.out.println("4");

    inputFile.close();
    System.out.println("5");

    inputFile = new Scanner(file);

    System.out.println("Welcome to the Harry Potter Quiz! Good Luck!");

    /*This is the setup for all of the questions, it works the same way for each question.
    First, a question object is created, the question is read, and then displayed. Then
    the answers are read, and displayed. Then the user answers the question, which is loggged
    and the correct answer is retrieved from the file, as well as times tried and times correct.
    When the user answers the question, a loop tests if it is a valid iput. If not, then the user
    is asked again for a valid input until one is achieved.
    */
    //Question 0
    System.out.println("Question 0:");
    Question question0 = new Question();
    question0.getQuestion();
    System.out.println(question0.question);
    System.out.println("Answers:");
    int question0NumberOfChoices = question0.getNumberOfChoices();
    question0.getAnswers();
    for(int j = 0; j < question0.numberOfChoices; j++){
      System.out.println(j + ":" + question0.answers[j]);
    }
    int question0CorrectAnswer = question0.getCorrectAnswer();
    int question0TimesTried = question0.getTimesTried();
    int question0TimesCorrect = question0.getTimesCorrect();
    int question0Answer;
    do {
      question0Answer = keyboard.nextInt();
    } while (question0Answer > (question0.numberOfChoices - 1) && question0Answer < 0);

    //Question 1
    System.out.println("Question 1:");
    Question question1 = new Question();
    question1.getQuestion();
    System.out.println(question1.question);
    System.out.println("Answers:");
    int question1NumberOfChoices = question1.getNumberOfChoices();
    question1.getAnswers();
    for(int j = 0; j < question1.numberOfChoices; j++){
      System.out.println(j + ":" + question1.answers[j]);
    }
    int question1CorrectAnswer = question1.getCorrectAnswer();
    int question1TimesTried = question1.getTimesTried();
    int question1TimesCorrect = question1.getTimesCorrect();
    int question1Answer;
    do {
      question1Answer = keyboard.nextInt();
    } while (question1Answer > (question1.numberOfChoices - 1) && question1Answer < 0);

    //Question2
    System.out.println("Question 2:");
    Question question2 = new Question();
    question2.getQuestion();
    System.out.println(question2.question);
    System.out.println("Answers:");
    int question2NumberOfChoices = question2.getNumberOfChoices();
    question2.getAnswers();
    for(int j = 0; j < question2.numberOfChoices; j++){
      System.out.println(j + ":" + question2.answers[j]);
    }
    int question2CorrectAnswer = question2.getCorrectAnswer();
    int question2TimesTried = question2.getTimesTried();
    int question2TimesCorrect = question2.getTimesCorrect();
    int question2Answer;
    do {
      question2Answer = keyboard.nextInt();
    } while (question2Answer > (question2.numberOfChoices - 1) && question2Answer < 0);

    //Question 3
    System.out.println("Question 3:");
    Question question3 = new Question();
    question3.getQuestion();
    System.out.println(question3.question);
    System.out.println("Answers:");
    int question3NumberOfChoices = question3.getNumberOfChoices();
    question3.getAnswers();
    for(int j = 0; j < question3.numberOfChoices; j++){
      System.out.println(j + ":" + question3.answers[j]);
    }
    int question3CorrectAnswer = question3.getCorrectAnswer();
    int question3TimesTried = question3.getTimesTried();
    int question3TimesCorrect = question3.getTimesCorrect();
    int question3Answer;
    do {
      question3Answer = keyboard.nextInt();
    } while (question3Answer > (question3.numberOfChoices - 1) && question3Answer < 0);

    //Question 4
    System.out.println("Question 4:");
    Question question4 = new Question();
    question4.getQuestion();
    System.out.println(question4.question);
    System.out.println("Answers:");
    int question4NumberOfChoices = question4.getNumberOfChoices();
    question4.getAnswers();
    for(int j = 0; j < question4.numberOfChoices; j++){
      System.out.println(j + ":" + question4.answers[j]);
    }
    int question4CorrectAnswer = question4.getCorrectAnswer();
    int question4TimesTried = question4.getTimesTried();
    int question4TimesCorrect = question4.getTimesCorrect();
    int question4Answer;
    do {
      question4Answer = keyboard.nextInt();
    } while (question4Answer > (question4.numberOfChoices - 1) && question4Answer < 0);

    //end of quesitons
    //results

    System.out.println("-------------------------------------");
    System.out.println("Let's see how you did!");
    int numberOfCorrectAnswers = 0;
    int numberofQuestions = listOfQuestions.size();

    /*For this part, there are 5 pieces that are the same. For each question, the program
    prints the question, the correct answer, and the answer the user chose. Then it checks if the user
    got it right, if so, it tells them, and if not, it also tells them. Then the program displays the
    times the user got it right, and the percentage of how many times they got it right
    */

    System.out.println(listOfQuestions.get(0));
    System.out.println("The correct answer is: " + question0CorrectAnswer);
    System.out.println("Your answer was: " + question0Answer);
    if(question0Answer == question0CorrectAnswer){
      System.out.println("You got it right!");
      numberOfCorrectAnswers++;
    }
    else{
      System.out.println("Sorry, you got it wrong.");
    }
    System.out.println("Amount of times you got it correct: " + question0TimesCorrect);
    System.out.println("Amount of tiems you tried it: " + question0TimesTried);
    float question0Percentage;
    if (question0TimesTried == 0){
      question0Percentage = 0;
    }
    else{
      question0Percentage = question0TimesCorrect / question0TimesTried;
    }    System.out.println("Percentage right: " + question0Percentage);


    System.out.println(listOfQuestions.get(1));
    System.out.println("The correct answer is: " + question1CorrectAnswer);
    System.out.println("Your answer was: " + question1Answer);
    if(question1Answer == question1CorrectAnswer){
      System.out.println("You got it right!");
      numberOfCorrectAnswers++;
    }
    else{
      System.out.println("Sorry, you got it wrong.");
    }
    System.out.println("Amount of times you got it correct: " + question1TimesCorrect);
    System.out.println("Amount of tiems you tried it: " + question1TimesTried);
    float question1Percentage;
    if (question1TimesTried == 0){
      question1Percentage = 0;
    }
    else{
      question1Percentage = question1TimesCorrect / question1TimesTried;
    }
    System.out.println("Percentage right: " + question1Percentage);


    System.out.println(listOfQuestions.get(2));
    System.out.println("The correct answer is: " + question2CorrectAnswer);
    System.out.println("Your answer was: " + question2Answer);
    if(question2Answer == question2CorrectAnswer){
      System.out.println("You got it right!");
      numberOfCorrectAnswers++;
    }
    else{
      System.out.println("Sorry, you got it wrong.");
    }
    System.out.println("Amount of times you got it correct: " + question2TimesCorrect);
    System.out.println("Amount of tiems you tried it: " + question2TimesTried);
    float question2Percentage;
    if (question2TimesTried == 0){
      question2Percentage = 0;
    }
    else{
      question2Percentage = question2TimesCorrect / question2TimesTried;
    }    System.out.println("Percentage right: " + question2Percentage);


    System.out.println(listOfQuestions.get(3));
    System.out.println("The correct answer is: " + question3CorrectAnswer);
    System.out.println("Your answer was: " + question3Answer);
    if(question3Answer == question3CorrectAnswer){
      System.out.println("You got it right!");
      numberOfCorrectAnswers++;
    }
    else{
      System.out.println("Sorry, you got it wrong.");
    }
    System.out.println("Amount of times you got it correct: " + question3TimesCorrect);
    System.out.println("Amount of tiems you tried it: " + question3TimesTried);
    float question3Percentage;
    if (question3TimesTried == 0){
      question3Percentage = 0;
    }
    else{
      question3Percentage = question3TimesCorrect / question3TimesTried;
    }    System.out.println("Percentage right: " + question3Percentage);


    System.out.println(listOfQuestions.get(4));
    System.out.println("The correct answer is: " + question4CorrectAnswer);
    System.out.println("Your answer was: " + question4Answer);
    if(question4Answer == question4CorrectAnswer){
      System.out.println("You got it right!");
      numberOfCorrectAnswers++;
    }
    else{
      System.out.println("Sorry, you got it wrong.");
    }
    System.out.println("Amount of times you got it correct: " + question4TimesCorrect);
    System.out.println("Amount of tiems you tried it: " + question4TimesTried);
    float question4Percentage;
    if (question4TimesTried == 0){
      question4Percentage = 0;
    }
    else{
      question4Percentage = question4TimesCorrect / question4TimesTried;
    }    System.out.println("Percentage right: " + question4Percentage);

    /*This puts the percentages of correct questions into an array,
    and then finds the highest and lowest one, and then displays both to the user
    */

    float[] percentages = new float[5];
    percentages[0] = question0Percentage;
    percentages[1] = question1Percentage;
    percentages[2] = question2Percentage;
    percentages[3] = question3Percentage;
    percentages[4] = question4Percentage;

    float bestQuestion = percentages[0];
    for (int index = 1; index < percentages.length; index++){
      if(percentages[index] > bestQuestion){
        bestQuestion = percentages[index];
      }
    }

    float worstQuestion = percentages[0];
    for (int index = 1; index < percentages.length; index++){
      if(percentages[index] < worstQuestion){
        worstQuestion = percentages[index];
      }
    }

    System.out.println("Your worst percentage correct of a question was: " + worstQuestion);
    System.out.println("Your best percentage correct of a question was: " + bestQuestion);



  }
}

import java.io.*;
import java.util.Scanner;

public class Question{

  public String question;
  public int numberOfChoices;
  public int answerChoice;
  public int timesTried;
  public int timesCorrect;
  public String[] answers;

  public String getQuestion() throws IOException{
    Scanner keyboard = new Scanner(System.in);
    File file = new File("Questions.txt");
    Scanner inputFile = new Scanner(file);

    question = inputFile.nextLine();
    return question;
  }

  public int getNumberOfChoices() throws IOException{
    File file = new File("Questions.txt");
    Scanner inputFile = new Scanner(file);
    numberOfChoices = inputFile.nextInt();
    return numberOfChoices;
  }

  public String[] getAnswers() throws IOException{
    File file = new File("Questions.txt");
    Scanner inputFile = new Scanner(file);
    String[] answers = new String[numberOfChoices];
    for(int index = 0; index < numberOfChoices; index++){
      answers[index] = inputFile.nextLine();
    }
    return answers;
  }

  public int getCorrectAnswer() throws IOException{
    File file = new File("Questions.txt");
    Scanner inputFile = new Scanner(file);
    answerChoice = inputFile.nextInt();
    return answerChoice;
  }

  public int getTimesTried() throws IOException{
    File file = new File("Questions.txt");
    Scanner inputFile = new Scanner(file);
    timesTried = inputFile.nextInt();
    return timesTried;

  }

  public int getTimesCorrect() throws IOException{
    File file = new File("Questions.txt");
    Scanner inputFile = new Scanner(file);
    timesCorrect = inputFile.nextInt();
    return timesCorrect;
  }

}

import java.io.*;
public class QuizFile{

  public static void main (String[] args){

  }
  public void createQuestions() throws IOException{

    PrintWriter outputFile = new PrintWriter("Questions.txt");

    outputFile.println("What is the only antidote to basilisk venom?");
    outputFile.println("4");
    outputFile.println("Phoenix Tears");
    outputFile.println("Dragon's Blood");
    outputFile.println("A Bezoar");
    outputFile.println("Mandrake Draught");
    outputFile.println("0");
    outputFile.println("0");
    outputFile.println("0");

    outputFile.println("How many times was Nearly Headless Nick hit in the head with a blunt axe?");
    outputFile.println("3");
    outputFile.println("34");
    outputFile.println("45");
    outputFile.println("20");
    outputFile.println("1");
    outputFile.println("0");
    outputFile.println("0");

    outputFile.println("What magical object causes people to turn orange or sprout tentacle-like warts?");
    outputFile.println("4");
    outputFile.println("Metamorph-Medals");
    outputFile.println("Decoy Detonators");
    outputFile.println("The Mirror Of Erised");
    outputFile.println("U-No-Poo");
    outputFile.println("0");
    outputFile.println("0");
    outputFile.println("0");

    outputFile.println("How does Felix Felicis behave when in the cauldron?");
    outputFile.println("4");
    outputFile.println("It Spills Over The Sides");
    outputFile.println("It Bubbles Merrily");
    outputFile.println("Droplets Leap Out Like Goldfish Above The Surface");
    outputFile.println("Droplets Whizz Through The Air At High Speeds");
    outputFile.println("2");
    outputFile.println("0");
    outputFile.println("0");

    outputFile.println("How mamy brothers does Ron have?");
    outputFile.println("3");
    outputFile.println("3");
    outputFile.println("7");
    outputFile.println("5");
    outputFile.println("2");
    outputFile.println("0");
    outputFile.println("0");

    outputFile.close();
  }

}

0 个答案:

没有答案
相关问题