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

Java 创建文本文件后,程序在第一行后停止。不知道为什么,需要帮助吗,java,arrays,arraylist,crash,text-files,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 stat

我必须为一个项目做一个问答游戏,程序在第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();
  }

}
import java.io.*;
导入java.util.Scanner;
导入java.util.ArrayList;
公开课测验{
公共静态void main(字符串[]args)引发IOException{
扫描仪键盘=新扫描仪(System.in);
QuizFile QuizFile=新的QuizFile();
quizFile.createQuestions();
System.out.println(“hi”);
系统输出打印项次(“1”);
//打开文件
File File=新文件(“Questions.txt”);
扫描仪输入文件=新扫描仪(文件);
系统输出打印项次(“2”);
弦线;
//创建ArrayList
ArrayList listOfQuestions=新的ArrayList();
int lineCounter=0;
//计算文件中有多少行
while(inputFile.hasNextLine()){
lineCounter++;
}
系统输出打印项次(“3”);
//通过读取列表中的特定行,将文件中的问题添加到ArrayList
对于(int lineIndex=1;lineIndex(问题0.numberOfChoices-1)和&question0回答<0);
//问题1
System.out.println(“问题1:”);
问题1=新问题();
问题1.getQuestion();
System.out.println(问题1.问题);
System.out.println(“答案:”);
int question1NumberOfChoices=question1.getNumberOfChoices();
问题1.获取答案();
对于(int j=0;j(问题1.numberOfChoices-1)和问题1回答<0);
//问题2
System.out.println(“问题2:”);
问题2=新问题();
问题2.getQuestion();
System.out.println(问题2.问题);
System.out.println(“答案:”);
int question2NumberOfChoices=question2.getNumberOfChoices();
问题2.获取答案();
对于(int j=0;j(问题2.numberOfChoices-1)和问题2回答<0);
//问题3
System.out.println(“问题3:”);
问题3=新问题();
问题3.getQuestion();
System.out.println(问题3.问题);
System.out.println(“答案:”);
int question3NumberOfChoices=question3.getNumberOfChoices();
问题3.获取答案();
对于(int j=0;j(问题3.numberOfChoices-1)和问题3回答<0);
//问题4
System.out.println(“问题4:”);
问题4=新问题();
问题4.getQuestion();
System.out.println(问题4.问题);
System.out.println(“答案:”);
int question4NumberOfChoices=question4.getNumberOfChoices();
问题4.获取答案();
对于(int j=0;j(问题4.numberOfChoices-1)和问题4答案<0);
//问题的结束
//结果
System.out.println(“-----------------------------------------”;
System.out.println(“让我们看看你做得怎么样!”);
int numberOfCorrectAnswers=0;
int numberofQuestions=listOfQuestions.size();
/*对于这部分,有5个相同的部分。对于每个问题,程序
打印问题、正确答案和用户选择的答案。然后检查用户是否
如果正确,它会告诉他们,如果不正确,它也会告诉他们。然后程序显示
用户正确操作的次数,以及用户正确操作次数的百分比
*/
System.out.println(listOfQuestions.get(0));
System.out.println(“正确答案是:“+Question0正确答案”);
System.out.println(“您的答案是:“+question0Answer”);
如果(问题0答案==问题0正确答案){
System.out.println(“你做对了!”);
numberOfCorrectAnswers++;
}
否则{
System.out.println(“对不起,你搞错了。”);
}
System.out.println(“正确的次数:+Question0TimesRect”);
System.out.println(“您尝试它的次数:+question0TimesTried”);
浮动百分比;
如果(问题0时间==0){
问题0百分比=0;
}
否则{
问题0百分比=问题0时间纠正/问题0时间纠正;
}System.out.println(“Perc