Java程序DriverLicence使用文件

时间:2014-10-01 09:33:56

标签: java arrays file

嗨,我对这个特殊问题感到困惑。我创建了一个名为DriverExam的程序,它从用户读取并将其与数组匹配并获得答案,但我想从文件而不是数组中读取。到目前为止,我能够阅读第一行。有人可以帮助我如何读取所有行并存储在适当的类中,并获得输出,没有人通过,失败,有多少得到正确,有多少得到超过10个问题正确。

这是我目前的代码

文件输入的内容如下

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

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

A B D C A D C D A B A D C A B C D A B 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.");
    }
}

}

2 个答案:

答案 0 :(得分:0)

这很可能对您有用: How to read a large text file line by line using Java?

BufferedReader br = new BufferedReader(new FileReader("input_file_path"));
String line;
while ((line = br.readLine()) != null) {
   // Process the string into whatever format you need
}
br.close();

答案 1 :(得分:0)

您可能需要String to 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...");
    }