抬头是的这是作业,但我几乎完成了所有这些我只需要帮助计算分数方法和输出方法。我不是要求某人完成它我只是需要一些帮助。
您的一位教授需要帮助评分真/假测试。学生的ID和考试答案存储在一个文件中。文件中的第一个条目包含以下形式的测试答案:
TFFTFFTTTTFFTFTFTFTT
文件中的第二个条目是一个整数,即文件中学生的总数。
文件中的每个其他条目都是学生的ID,后面是空白,然后是学生的回复。例如,条目:
ABC54301 TFTFTFTT TFTFTFFTTFT
表示学生的ID为ABC54301,问题1的答案为True,问题2的答案为False,依此类推。该学生未回答问题9.每个空白答案应替换为S(表示跳过的问题)。考试有20个问题。
每个正确答案获得两分,每个错误答案获得-1分,没有答案获得0分。编写一个处理测试数据的程序。每个学生输出的第一行应该是学生的ID,然后是答案,然后是考试成绩,然后是考试成绩。第二行应该在学生错过的每个答案下都包含一个X.
假设以下年级:90% - 100%,A; 80% - 89.99%,B; 70% - 79.99%,C; 60% - 69.99%,D;和0% - 59.99%,F。
输入文件中的数据必须一次性输入并存储在单个变量中。必须从单个变量一次性输出数据。您必须在程序中使用多种方法。这取决于您创建的数量,但是您应该拥有最低金额,并且您将因为在主方法中放入太多代码而被计算在内。
示例输入:
ABC54301 TFTFTFTT TFTFTFFTTFT
示例输出: ABC54301 TFTFTFTTSTFTFTFFTTFT 77.5%C XXX X XXXX XX
到目前为止,我的所有代码都需要2个方法的帮助,这是关于它的事先谢谢!
import java.util.*;
import java.io.*;
public class TestGrader
{
public static Scanner inFile;
public static PrintWriter outFile;
public static void main(String[] args)throws IOException
{
inFile = new Scanner(new FileReader("GradesIn.dat"));
outFile = new PrintWriter("GradesOut.dat");
String testAnswers = inFile.next();
int numberOfStudents = inFile.nextInt();
double[] testScores = new double[numberOfStudents];
String[][] studentTests = new String[numberOfStudents][2];
StringBuilder[][] studentResults = new StringBuilder[numberOfStudents][2];
initializeResults(studentResults);
getData(studentTests);
gradeTests(studentTests, studentResults, testAnswers, testScores);
outputData(studentTests, studentResults, testScores);
outFile.close();
inFile.close();
}
/////////////////////////////////////////////////////////////////////////////
// Method Name: initializeResults
// Called By: main()
/////////////////////////////////////////////////////////////////////////////
public static void initializeResults(StringBuilder[][] studentResults)
{
for(int rowIndex = 0; rowIndex < studentResults.length; rowIndex++)
{
for(int colIndex = 0; colIndex < studentResults[rowIndex].length; colIndex++)
{
if(colIndex == 0)
{
studentResults[rowIndex][colIndex] = new StringBuilder(" ");
}
else
{
studentResults[rowIndex][colIndex] = new StringBuilder(" ");
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
// Method Name: getData
// Called By: main()
/////////////////////////////////////////////////////////////////////////////
public static void getData(String[][] studentTests)
{
String[] temp = new String[studentTests.length];
inFile.nextLine();
for(int index = 0; index < (temp.length); index++)
{
temp[index] = inFile.nextLine();
}
for(int rowIndex = 0; rowIndex < studentTests.length; rowIndex++)
{
studentTests[rowIndex][0] = temp[rowIndex].substring(0,8);
}
for(int rowIndex = 0; rowIndex < studentTests.length; rowIndex++)
{
studentTests[rowIndex][1] = temp[rowIndex].substring(9, 29);
}
}
/////////////////////////////////////////////////////////////////////////////
// Method Name: gradeTests
// Called By: main()
/////////////////////////////////////////////////////////////////////////////
public static void gradeTests(String[][] studentTests, StringBuilder[][] studentResults, String testAnswers, double[] testScores)
{
}
/////////////////////////////////////////////////////////////////////////////
// Method Name: outputData
// Called By: main()
/////////////////////////////////////////////////////////////////////////////
public static void outputData(String[][] studentTests, StringBuilder[][] studentResults, double[] testScores)
{
}
/////////////////////////////////////////////////////////////////////////////
// Method Name: calculateLetterGrade
// Called By: outputData()
/////////////////////////////////////////////////////////////////////////////
public static String calculateLetterGrade(double testScore)
{
String letterGrade = "";
if((testScore / 40 * 100) < 60.0)
{
letterGrade = "F";
}
else if((testScore / 40 * 100) < 70.0)
{
letterGrade = "D";
}
else if((testScore / 40 * 100) < 80.0)
{
letterGrade = "C";
}
else if((testScore / 40 * 100) < 90.0)
{
letterGrade = "B";
}
else
{
letterGrade = "A";
}
return letterGrade;
}
}
答案 0 :(得分:-2)
首先尝试在获取数据时去除空格,以便以后处理(并避免将该行为放入评分方法中)。
studentTests[rowIndex][1] = temp[rowIndex].substring(9, 29).replace(" ", "S");
此外,你应该注意最后一个(以及最后一个,n-2,n-3,全部)问题没有得到答复的情况,你的换行会更早。但我把它留给你。
然后转到您的gradeTests方法并且好吧...只需比较结果的答案并根据您给出的公式计算。
for(int i = 0; i < studentTests.length; ++i) {
int score = 0;
for(int j = 0; j < result.length(); ++j) {
if(studentTests[i][1].charAt(j) == testAnswers.charAt(j)) {
++score;
} else if(studentTests[i][1].charAt(j) != 'S') {
--score;
}
}
testScores[i] = score;
}
在这里你必须自己弄清楚你需要什么令人毛骨悚然的StringBuilders。我给你一个提示:它似乎与X
s。
根据输出格式化结果。
您已经在studentTests[row][0]
中拥有学生编号,在studentTests[row][1]
中有个人答案,您在testScores[row]
中得分为分,如果您完成了正确的评分方法,studentResults
中的某个地方。现在得到百分比和字母等级,把所有东西放在一起,你就完成了。