繁体   English   中英

调用文件中多个值的方法

[英]Calling a method for multiple values in a file

我正在从下面程序的命令行中读取此文件:

Student1  
5
a Activities  0.05  
q Quizzes 0.10  
p Projects 0.25   
e Exams 0.30  
f Final 0.30  

**a100 a95 a100 a100 a100  
q90 q80 q100 q80 q80 r90  
p100 p95 p100 p85 p100  
e77.5 e88  
f92** 

GradeBookApp.java

public class GradeBookApp {

public static void main(String[] args) throws IOException {

  String fileName = "";
  String name = "";
  char[] categoryCodes = new char[5];
  String[] categories = new String[5];
  double[] categoryWeights = new double[5];
  double[][] gradeTable;


  if (args.length > 0) {

     for (int i = 0; i < args.length; i++) {
        System.out.println("Reading file \"" + args[i] + "\"." 
           + "\n\tCreating GradeBook object."
           + "\n\tAdding grades to GradeBook object."
           + "\nProcessing of file complete.");


        fileName = args[i];
        Scanner scanFile = new Scanner(new File(fileName));

        name = scanFile.nextLine();
        int catCodes = Integer.parseInt(scanFile.nextLine());

        for (i = 0; i < catCodes; i++) {
           String[] all = scanFile.nextLine().split(" ");
           if(all.length == 3 && all[0].length() == 1 && all[2].matches("(\\d+\\.\\d+)")){
              categoryCodes[i] = all[0].charAt(0);
              categories[i] = all[1];
              categoryWeights[i] = Double.parseDouble(all[2]);
           }
        }

        GradeBook myGB = new GradeBook (name, categoryCodes, 
           categories, categoryWeights);
}
}

我还有另一个包含方法“ addGrade”的类,该方法带有参数“ newGradeIn”。 此参数是来自正在读取的文件的等级,即a100或e88。 对于添加的每个等级,我将用容纳另外一项的阵列替换原始的2D阵列。

public boolean addGrade(String newGradeIn) {     

  char row = newGradeIn.charAt(0);
  int grade = Integer.parseInt(newGradeIn.substring(1));

  double[] oldArr = gradeTable[row];
  double[] newArr = Arrays.copyOf(oldArr, oldArr.length + 1);
  newArr[newArr.length - 1] = grade;
  gradeTable[row] = newArr;
  return row != 0; 
}

我完全不知道如何执行此操作。 我知道我可能应该使用一个for-each循环,但是我不确定该怎么做。

由于您要使用a100 a来存储100作为学生a的年级,因此您应该考虑使用Map而不是2D数组。 例如:

Map<String, double[]> gradeTable = new HashMap<>();

public void addGrade(String newGradeIn) {
    String row = newGradeIn.substring(0,1); // use the 'a' as a key in the hashmap to the grades of student `a`
    int grade = Integer.parseInt(newGradeIn.substring(1));
    double[] oldArr = gradeTable.get(row);
    if (oldArr == null) { // when you start - the hash-map is empty so we need to initialize the array
        oldArr = new double[0];
    }
    double[] newArr = Arrays.copyOf(oldArr, oldArr.length + 1);
    newArr[newArr.length - 1] = grade;
    gradeTable.put(row, newArr);
}

用法很简单:

GradeBook g = new GradeBook();
g.addGrade("a100");
g.addGrade("a95");
g.addGrade("b90");
g.addGrade("b95");
System.out.println(Arrays.toString(g.gradeTable.get("a"))); // [100.0, 95.0]
System.out.println(Arrays.toString(g.gradeTable.get("b"))); // [90.0, 95.0]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM