【问题标题】:Multiple Choice Java Quiz : How to input questions from a text file?多项选择 Java 测验:如何从文本文件中输入问题?
【发布时间】:2019-05-09 16:34:28
【问题描述】:

我正在使用 Java 创建一个多项选择测验。当它们被硬编码到源代码中时,我已经启动并运行了所有 10 个问题的实际程序,但我需要将其中 7 个问题放入一个文本文件中,该文件将从 .txt 输入并得到相同的回答.唯一的区别当然是这 7 个问题来自文本文件,而不是直接在源代码中。

有人可以解释或告诉我一种将这个文本文件输入到我的源代码中并以这种方式启动和运行测验的方法吗?

这是我的整体源代码:

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

    String q1 = "What is hardware?\n"
          + "(a)virtual machine\n(b)the physical machine\n(c)applications such as browsers\n(d)part of the processor\n";

    String q2 = "What does counter++; do?\n"
          + "(a)Adds 1 to counter\n(b)Adds 2 to counter\n(c)Gets the sum\n(d)Multiplies the numbers\n";

    String q3 = "What is a loop that never stops?\n"
          + "(a)For Loop\n(b)Infinite Loop\n(c)Do-While Loop\n(d)Full Loop\n";

    Question [] questions = {
            new Question(q1, "b"),
            new Question(q2, "a"),
            new Question(q3, "b"),
            new Question(q4, "c"),
            new Question(q5, "d"),
            new Question(q6, "a"),
            new Question(q7, "a"),
            new Question(q8, "c"),
            new Question(q9, "a"),
            new Question(qF, "c")
    };

    Collections.shuffle(Arrays.asList(questions));
    takeTest(questions);


}

public static void takeTest(Question [] questions){
    int score = 0;
    Scanner keyboardInput = new Scanner(System.in);


    for(int i = 0; i < questions.length; i++) {
        System.out.println(questions[i].prompt);
        String answer = keyboardInput.nextLine();
        if(answer.equals(questions[i].answer)) {
            score++;
        }
    }
    System.out.println("You got " + score + "/" + questions.length);
}

}

而我的文本文件就是我最初放在源代码中的七个问题:

String q4 = "In a while loop, if the boolean expression is true, what will the loop do?\n"
          + "(a)Break\n(b)Program will exit\n(c)Repeat\n(d)Continue through program\n";

String q5 = "What special value is designated for controlling a loop?\n"
          + "(a)Control value\n(b)Mutator Method\n(c)Accessor Method\n(d)Sentinel Value\n";

String q6 = "What is a method?\n"
          + "(a)A collection of statements grouped together to perform an operation\n(b)A value returned from a method using the return statement\n(c)The portion of the program where the variable can be accessed.\n(d)The combination of the name of a method and the list of its parameters\n";

String q7 = "What is an object?\n"
          + "(a)Representation of an entity in the real world that can be distinctly identified\n(b)A static method can be called without creating an instance of the class\n(c)Instance variable/instance mthod\n(d)A template, blueprint or contract that defines what an object's data fields and methods will be.\n";

String q8 = "What is an array?\n"
          + "(a)Numbers of items ArrayList can store without increasing its size\n(b)Number used as an index to pinpoint a specfic element within an array\n(c)Object that can store a group of values, all of the same type\n(d)Method of locating a specific item in a larger collection of data\n";

String q9 = "You use this statement to throw an exception manually.\n"
          + "(a)Throw\n(b)call stack\n(c)try block\n(d)thrown\n";

String qF = "When an exception is generated, it is said to have been what?\n"
          + "(a)Created\n(b)Called\n(c)Thrown\n(d)Generated\n";

【问题讨论】:

标签: java arrays input text


【解决方案1】:

您可以使用 BufferedReader 并尝试逐行读取。

这里是一个使用 BufferedReader 的例子:

BufferedReader br = new BufferedReader(new FileReader("PATH TO QUESTIONS FILE"));
String read = "";
while((read = br.readLine()) != null){
     System.out.println(read);
}

这样做您将读取并打印文件的每一行。

确保将每个问题写成一行,否则问题会混淆。

希望我能帮到你。 :)

【讨论】:

    【解决方案2】:
    1. 问题:多选题评分
    import java.util.Scanner;
    
    public class twoDimentionalArrays {
        public static void main (String[] args) { 
            Scanner scan = new Scanner (System.in);
            String[] answers = { "D","B","D","C","C","D","A","E","A","D"};
            String[][] list = new String[8][10];
            System.out.println("Fill in the eight student's answers to 10 questions" );
            for (int i =0;i<list.length;i++) {
                 int count =0;
                 for (int j=0;j<list[i].length;j++) {
                    list[i][j] = scan.next();
                    if(list[i][j].equalsIgnoreCase(answers[j])) count++;
                }
                System.out.println("Student's " + i + " correct answers are " + count);
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      我使用 ArrayList 对此使用了动态内存分配方法。

      
      import java.util.*;
      class Test
      {
          public static void main(String[] args)
          {
              ArrayList<String> que = new ArrayList<>();
              que.add("What is java");
              que.add("What is python");
              que.add("What is C");
              que.add("What is C++");
              ArrayList<String> opt = new ArrayList<>();
              opt.add("PL,SL,Both,None");
              opt.add("SL,PL,Both,None");
              opt.add("PL,None,SL,Both");
              opt.add("PL,Both,None,SL");
              ArrayList<String> correct = new ArrayList<>();
              correct.add("PL");
              correct.add("Both");
              correct.add("PL");
              correct.add("PL");
              Scanner sc = new Scanner(System.in);
              String c1="";
              int count=0;
              for(int i=0;i<que.size();i++)
              {
                  String q=que.get(i);
                  System.out.println(q);
                  String o=opt.get(i);
                  {
                      String[] s1 = o.split(",");
                      for(String s:s1)
                      {
                          System.out.println(s);
                      }
                  }
                  String c=correct.get(i);
                  {
                      c1 = c;
                  }
                  System.out.println("Your option: ");
                  String yr = sc.nextLine();
                  if(yr.equalsIgnoreCase(c1))
                  {
                      count++;
                  }
              }
              System.out.println("Marks:"+count);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-01-30
        • 1970-01-01
        • 2017-09-07
        • 2022-09-28
        • 1970-01-01
        • 2015-05-23
        • 2013-03-10
        • 2016-02-06
        • 2013-11-15
        相关资源
        最近更新 更多