使用文件的Java程序驱动程序

使用文件的Java程序驱动程序,java,arrays,file,Java,Arrays,File,嗨,我被这个问题难住了。我创建了一个名为DriverExam的程序,该程序从用户处读取数据并将其与数组匹配,然后得到答案,但我希望从文件而不是数组中读取数据。到目前为止,我能够阅读第一行。有人能帮助我如何阅读所有行并将其存储在适当的类中,并获得关于通过、失败人数、有多少人正确以及有多少人正确回答10个以上问题的输出 这是到目前为止我的代码 这些文件有如下输入 B D A C A B A C D B C D A D C B D A B D A C A B A C D B C D A D C B D

嗨,我被这个问题难住了。我创建了一个名为DriverExam的程序,该程序从用户处读取数据并将其与数组匹配,然后得到答案,但我希望从文件而不是数组中读取数据。到目前为止,我能够阅读第一行。有人能帮助我如何阅读所有行并将其存储在适当的类中,并获得关于通过、失败人数、有多少人正确以及有多少人正确回答10个以上问题的输出

这是到目前为止我的代码

这些文件有如下输入

B D A C A B A C D B C D A D C B D A

B D A C A B A C D B C D A D C B D A

A B D C A D C D A B A D C A B C D A B A

public class DriversLicenceExam {

    private char[] key = { 'B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D',
                            'B', 'C', 'D', 'A', 'D', 'C', 'C', 'B', 'D', 'A' };


    private char[] answers;

    public DriversLicenceExam(char[] answers) {
        this.answers = answers;
    }
    public boolean passed(){

        return(totalCorrect()>=15);
    }
    public int totalCorrect(){
        int correct = 0;
        for(int i = 0; i<key.length;i++){

            if(key[i]==answers[i]){
                correct++;
            }
        }
        return correct;
    }

    public int totalIncorrect(){
        int incorrect = 0;
        incorrect = key.length - totalCorrect();
        return incorrect;
    }

    public int questionMissed(){

        int size = key.length - totalCorrect();
        int[] missed = null;
        if(size<1)
        return size;
        else
            missed = new int[size];

        int pos=0;
        for(int i = 0; i<key.length;i++){
            if(key[i]!=answers[i]){
                missed[pos] = (i+1);
                pos+=1;
            }
        }
        return size;
    }



}


      import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class DriverLicenceFilesDemo {

public static void main(String[] args) throws IOException {
    // create scanner object for keyboard input
    Scanner kb = new Scanner(System.in);

    String fileName;
    File myfile;

    char[] answers = new char[20];

    do {
        System.out.print("Please enter the name of the file: ");
        fileName = kb.next();

        myfile = new File(fileName);

        if (myfile.exists()) {
            Scanner infile = new Scanner(myfile);
            while (infile.hasNext()) {

                for (int i = 0; i < answers.length; i++) {

                    answers[i] = infile.next().charAt(0);

                }

            }
            infile.close();
        }

        else {
            System.out.println("File does not exist...");
        }

    } while (!myfile.exists());

    // create driver class
    DriversLicenceExam myDriver = new DriversLicenceExam(answers);

    // Display here
    System.out.println();
    //System.out.print("You " + (myDriver.passed() ? "passed" : "did not passed" ) + ".\n");
    System.out.println("Total correct: " + myDriver.totalCorrect());
    System.out.println("Total incorrect: " + myDriver.totalIncorrect());
    if (myDriver.passed() == true)
    {
        System.out.println("Congratulations! You have passed!");
    }
    else 
    {
        System.out.println("You have failed.");
    }
}

}
A B D C A D C D A B A D C A B C D A B A

public class DriversLicenceExam {

    private char[] key = { 'B', 'D', 'A', 'A', 'C', 'A', 'B', 'A', 'C', 'D',
                            'B', 'C', 'D', 'A', 'D', 'C', 'C', 'B', 'D', 'A' };


    private char[] answers;

    public DriversLicenceExam(char[] answers) {
        this.answers = answers;
    }
    public boolean passed(){

        return(totalCorrect()>=15);
    }
    public int totalCorrect(){
        int correct = 0;
        for(int i = 0; i<key.length;i++){

            if(key[i]==answers[i]){
                correct++;
            }
        }
        return correct;
    }

    public int totalIncorrect(){
        int incorrect = 0;
        incorrect = key.length - totalCorrect();
        return incorrect;
    }

    public int questionMissed(){

        int size = key.length - totalCorrect();
        int[] missed = null;
        if(size<1)
        return size;
        else
            missed = new int[size];

        int pos=0;
        for(int i = 0; i<key.length;i++){
            if(key[i]!=answers[i]){
                missed[pos] = (i+1);
                pos+=1;
            }
        }
        return size;
    }



}


      import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class DriverLicenceFilesDemo {

public static void main(String[] args) throws IOException {
    // create scanner object for keyboard input
    Scanner kb = new Scanner(System.in);

    String fileName;
    File myfile;

    char[] answers = new char[20];

    do {
        System.out.print("Please enter the name of the file: ");
        fileName = kb.next();

        myfile = new File(fileName);

        if (myfile.exists()) {
            Scanner infile = new Scanner(myfile);
            while (infile.hasNext()) {

                for (int i = 0; i < answers.length; i++) {

                    answers[i] = infile.next().charAt(0);

                }

            }
            infile.close();
        }

        else {
            System.out.println("File does not exist...");
        }

    } while (!myfile.exists());

    // create driver class
    DriversLicenceExam myDriver = new DriversLicenceExam(answers);

    // Display here
    System.out.println();
    //System.out.print("You " + (myDriver.passed() ? "passed" : "did not passed" ) + ".\n");
    System.out.println("Total correct: " + myDriver.totalCorrect());
    System.out.println("Total incorrect: " + myDriver.totalIncorrect());
    if (myDriver.passed() == true)
    {
        System.out.println("Congratulations! You have passed!");
    }
    else 
    {
        System.out.println("You have failed.");
    }
}

}

这很可能对您有用:


您可能需要一个字符串来进行char[]数组转换

char[] answerArray = line.toCharArray();
删除空白数组元素并继续比较逻辑

=================================================================================================

在您的代码中有很多设计改进的余地。使用面向对象的概念,而不是原始数据类型等。但无论如何,以下是现有代码的答案:

if (myfile.exists()) {

        BufferedReader infile = new BufferedReader(new FileReader(fileName));
        String line;
        while((line = infile.readLine()) != null){
            line = line.replaceAll("\\s", ""); // remove all blank spaces.
            if(!line.equals("")){
                answers = line.toCharArray();

            // create driver class
            DriversLicenceExam myDriver = new DriversLicenceExam(answers);

            // Display here
            System.out.println();
            //System.out.print("You " + (myDriver.passed() ? "passed" : "did not passed" ) + ".\n");
            System.out.println("Total correct: " + myDriver.totalCorrect());
            System.out.println("Total incorrect: " + myDriver.totalIncorrect());
            if (myDriver.passed() == true)
            {
                System.out.println("Congratulations! You have passed!");
            }
            else 
            {
                System.out.println("You have failed.");
            }
            System.out.println("============================================================");
            }
        }
        infile.close();
    }

    else {
        System.out.println("File does not exist...");
    }

我是java初学者,不知道如何使用它。。我已经修改了我的代码,如果你能编辑它就太好了。到目前为止,它只阅读第一行,但不知道如何阅读其余的