嗨,我对这个特殊问题感到困惑。我创建了一个名为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.");
}
}
}
答案 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...");
}