使用Java中的数组的真或假测试平地机

时间:2014-05-05 20:01:35

标签: java arrays

抬头是的这是作业,但我几乎完成了所有这些我只需要帮助计算分数方法和输出方法。我不是要求某人完成它我只是需要一些帮助。

您的一位教授需要帮助评分真/假测试。学生的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;
  }
}

1 个答案:

答案 0 :(得分:-2)

&#34; &#34; - &GT; &#34; S&#34;

首先尝试在获取数据时去除空格,以便以后处理(并避免将该行为放入评分方法中)。

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中的某个地方。现在得到百分比和字母等级,把所有东西放在一起,你就完成了。

祝你好运