我有这段代码,我需要将字符串“ Name”,“ Testav”,“ HWav”,“ Lows”,“ grade”导出到2D数组中,各列分别为以下内容。然后,我需要将2D数组导出到csv文件中。任何帮助将不胜感激。

import java.util.*;
import java.io.*;
import java.io.PrintWriter;
import java.text.*;
public class ComputeGrades {
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);

        System.out.printf("Please enter the name of the input file: ");
        String input_name = in.next();
        System.out.printf("Please enter the name of the output CSV file: ");
        String csv_name = in.next();
        System.out.printf("Please enter the name of the output pretty-print file: ");
        String pretty_name = in.next();

        processGrades(input_name, csv_name, pretty_name);
        System.out.printf("\nExiting...\n");
   }
   public static void processGrades (String input_name, String csv_name, String pretty_name)
   {
       PrintWriter csv = null;
       PrintWriter pretty = null;
       String[][] data = readSpreadsheet(input_name);

       boolean resultb = sanityCheck(data);
       int length = data.length;
       ArrayList<String> test_avg = new ArrayList<String>();
       ArrayList<String> HW_avg = new ArrayList<String>();
       ArrayList<String> NAME = new ArrayList<String>();
       ArrayList<String> ColN = new ArrayList<String>();
       ArrayList<String> Hell = new ArrayList<String>();
       String[][] kill_me = new String[length][];
       for(int row = 1; row<length; row++)
       {
           String name = data[row][0];
           String name2 = data[row][1];
           String Name = name+" "+name2;
           int test1 = Integer.parseInt(data[row][2]);
           int test2 = Integer.parseInt(data[row][3]);
           int test3 = Integer.parseInt(data[row][4]);
           int Test = (test1+test2+test3)/3;
           String Testav = Integer.toString(Test);
           int hw1 = Integer.parseInt(data[row][5]);
           int hw2 = Integer.parseInt(data[row][6]);
           int hw3 = Integer.parseInt(data[row][7]);
           int hw4 = Integer.parseInt(data[row][8]);
           int hw5 = Integer.parseInt(data[row][9]);
           int hw6 = Integer.parseInt(data[row][10]);
           int hw7 = Integer.parseInt(data[row][11]);
           int HW = (hw1+hw2+hw3+hw4+hw5+hw6+hw7)/7;
           String HWav = Integer.toString(HW);
           int[] trying = {Test, HW};
           int low = find_min(trying);
           String Lows = Integer.toString(low);
           String grade = null;
           if(low>=90)
           {
               grade ="A";
           }
           if(low < 90 && low>= 80)
           {
               grade = "B";
           }
           if(low <80 && low>=70)
           {
               grade ="C";
           }
           if(low<70 && low>=60)
           {
               grade="D";
           }
           if(low<60)
           {
               grade = "F";
           }
           test_avg.add(Testav);
           HW_avg.add(HWav);
           NAME.add(Name);
           Hell.add(Name);
           Hell.add(Testav);
           Hell.add(HWav);
           Hell.add(Lows);
           Hell.add(grade);
      }
      System.out.println(Hell);
      System.out.printf("\n");
      File csvFile = new File(csv_name);
      try (PrintWriter csvWriter = new PrintWriter(new FileWriter(csvFile));){
          Hell.stream().forEach(csvWriter::println);
      } catch (IOException e) {
      }

  }


  public static int find_min(int[] values)
  {
      int result = values[0];
      for(int i = 0; i<values.length; i++)
      {
          if(values[i]<result)
          {
              result = values[i];
          }
      }
      return result;
  }
  public static boolean sanityCheck(String[][] data)
  {
      if (data == null)
      {
          System.out.printf("Sanity check: nul data\n");
          return false;
      }
      if(data.length<3)
      {
          System.out.printf("Sanity check: %d rows\n",data.length);
          return false;
      }
      int cols= data[0].length;
      for(int row = 0; row<data.length; row++)
      {
          int current_cols = data[row].length;
          if(current_cols!=cols)
          {
              System.out.printf("Sanity Check: %d columns at rows%d\n", current_cols, row);
              return false;
          }
      }

      return true;
  }
  public static String[][] readSpreadsheet(String filename)
  {
      ArrayList<String> lines = readFile(filename);
      if (lines == null)
      {
          return null;
      }

      int rows = lines.size();
      String[][] result = new String[rows][];

      for (int i = 0; i < rows; i++)
      {
          String line = lines.get(i);
          String[] values = line.split(",");
          result[i] = values;
      }

      return result;
  }

  public static ArrayList<String> readFile(String filename)
  {
      File temp = new File(filename);
      Scanner input_file;

      try
      {
          input_file = new Scanner(temp);
      } catch (Exception e)
      {
          System.out.printf("Failed to open file %s\n",
              filename);
          return null;
      }

      ArrayList<String> result = new ArrayList<String>();
      while (input_file.hasNextLine())
      {
          String line = input_file.nextLine();
          result.add(line);
      }

      input_file.close();
      return result;
  }
}

input file:
First,Last,Exam1,Exam2,Final,H1,H2,H3,H4,H5,H6,H7
Ping,Milledge,43,59,68,69,62,43,60,38,37,40
Elisa,Oltz,76,94,73,100,99,100,90,97,100,92
Leonard,Havers,67,95,57,69,95,71,68,61,93,61
Setsuko,Lovera,78,100,84,89,88,92,65,85,66,97
Franklyn,Degnim,54,74,50,63,78,42,42,41,67,64
Gwyneth,Marsico,61,89,81,59,59,62,88,60,66,66
Abigail,Greep,69,99,93,94,91,85,78,91,69,71
Majorie,Granvold,78,100,100,82,96,100,89,100,100,94
Daphine,Polaco,62,82,88,81,68,89,62,73,90,62
An,Corvera,44,71,37,46,57,42,59,66,54,60
Ayanna,Pensiero,64,42,56,37,53,66,69,52,43,58
Era,Deming,98,81,100,69,65,73,77,78,73,89
Michal,Slentz,73,85,81,82,74,93,81,76,69,81
Corie,Brazen,86,99,66,100,69,97,96,100,70,84
Dona,Tufte,63,54,70,71,55,68,86,66,75,63
Juan,Rohdenburg,78,89,100,91,80,97,92,100,98,100
Orville,Samit,88,63,60,88,81,56,91,76,77,80
Ricky,Knoechel,100,100,93,81,100,90,100,92,100,84
Blythe,Threet,38,68,35,61,63,51,48,72,49,51
Sammie,Wachs,46,53,52,76,50,52,56,68,46,75
Estelle,Veazey,72,87,69,98,96,77,95,91,100,91
Agatha,Keckler,100,92,90,95,85,100,94,85,92,100
Novella,Oros,85,76,100,92,84,77,77,90,86,98
Tanya,Quinlisk,47,78,71,50,79,52,69,66,51,45
Marion,Coltrin,68,68,54,39,61,44,66,58,47,74
Helene,Karow,100,100,75,79,100,100,100,92,89,96
Shonta,Bourek,100,96,90,81,97,84,91,100,100,100
Hyon,Anglemyer,81,76,43,43,47,53,44,60,57,65
Ervin,Kenison,78,53,54,75,55,46,61,75,56,69
Renato,Urch,71,64,64,84,49,57,63,69,81,64
Mikel,Burleigh,88,100,90,100,90,91,90,80,74,74
Val,Royal,100,80,100,99,100,100,76,86,100,96
Jodie,Adolfo,94,77,59,83,67,79,87,82,82,75
Roselee,Lienhard,68,75,58,82,96,62,60,94,68,58
Austin,Holznecht,76,49,79,48,58,68,67,71,70,61
Emelia,Toney,70,95,74,90,99,68,100,66,98,98
Lucy,Rhodd,71,91,100,82,100,93,100,100,71,81
Sacha,Chee,78,71,90,82,74,64,62,87,69,84
Julio,Lackner,56,86,53,88,88,73,57,59,80,85
Salvador,Gretzner,54,83,91,66,78,67,61,84,82,6

export file(csv_name)
name,exam_score,hw_score,min_score,grade
Ping Milledge,56.666667,49.857143,49.857143,F
Elisa Oltz,81.000000,96.857143,81.000000,B
Leonard Havers,73.000000,74.000000,73.000000,C
Setsuko Lovera,87.333333,83.142857,83.142857,B
Franklyn Degnim,59.333333,56.714286,56.714286,F
Gwyneth Marsico,77.000000,65.714286,65.714286,D
Abigail Greep,87.000000,82.714286,82.714286,B
Majorie Granvold,92.666667,94.428571,92.666667,A
Daphine Polaco,77.333333,75.000000,75.000000,C
An Corvera,50.666667,54.857143,50.666667,F
Ayanna Pensiero,54.000000,54.000000,54.000000,F
Era Deming,93.000000,74.857143,74.857143,C
Michal Slentz,79.666667,79.428571,79.428571,C
Corie Brazen,83.666667,88.000000,83.666667,B
Dona Tufte,62.333333,69.142857,62.333333,D
Juan Rohdenburg,89.000000,94.000000,89.000000,B
Orville Samit,70.333333,78.428571,70.333333,C
Ricky Knoechel,97.666667,92.428571,92.428571,A
Blythe Threet,47.000000,56.428571,47.000000,F
Sammie Wachs,50.333333,60.428571,50.333333,F
Estelle Veazey,76.000000,92.571429,76.000000,C
Agatha Keckler,94.000000,93.000000,93.000000,A
Novella Oros,87.000000,86.285714,86.285714,B
Tanya Quinlisk,65.333333,58.857143,58.857143,F
Marion Coltrin,63.333333,55.571429,55.571429,F
Helene Karow,91.666667,93.714286,91.666667,A
Shonta Bourek,95.333333,93.285714,93.285714,A
Hyon Anglemyer,66.666667,52.714286,52.714286,F
Ervin Kenison,61.666667,62.428571,61.666667,D
Renato Urch,66.333333,66.714286,66.333333,D
Mikel Burleigh,92.666667,85.571429,85.571429,B
Val Royal,93.333333,93.857143,93.333333,A
Jodie Adolfo,76.666667,79.285714,76.666667,C
Roselee Lienhard,67.000000,74.285714,67.000000,D
Austin Holznecht,68.000000,63.285714,63.285714,D
Emelia Toney,79.666667,88.428571,79.666667,C
Lucy Rhodd,87.333333,89.571429,87.333333,B
Sacha Chee,79.666667,74.571429,74.571429,C
Julio Lackner,65.000000,75.714286,65.000000,D
Salvador Gretzner,76.000000,71.714286,71.714286,C

export file 2(pretty_name)
                name: exam score, hw score, min score, grade
       Ping Milledge:      56.67,    49.86,     49.86, F
          Elisa Oltz:      81.00,    96.86,     81.00, B
      Leonard Havers:      73.00,    74.00,     73.00, C
      Setsuko Lovera:      87.33,    83.14,     83.14, B
     Franklyn Degnim:      59.33,    56.71,     56.71, F
     Gwyneth Marsico:      77.00,    65.71,     65.71, D
       Abigail Greep:      87.00,    82.71,     82.71, B
    Majorie Granvold:      92.67,    94.43,     92.67, A
      Daphine Polaco:      77.33,    75.00,     75.00, C
          An Corvera:      50.67,    54.86,     50.67, F
     Ayanna Pensiero:      54.00,    54.00,     54.00, F
          Era Deming:      93.00,    74.86,     74.86, C
       Michal Slentz:      79.67,    79.43,     79.43, C
        Corie Brazen:      83.67,    88.00,     83.67, B
          Dona Tufte:      62.33,    69.14,     62.33, D
     Juan Rohdenburg:      89.00,    94.00,     89.00, B
       Orville Samit:      70.33,    78.43,     70.33, C
      Ricky Knoechel:      97.67,    92.43,     92.43, A
       Blythe Threet:      47.00,    56.43,     47.00, F
        Sammie Wachs:      50.33,    60.43,     50.33, F
      Estelle Veazey:      76.00,    92.57,     76.00, C
      Agatha Keckler:      94.00,    93.00,     93.00, A
        Novella Oros:      87.00,    86.29,     86.29, B
      Tanya Quinlisk:      65.33,    58.86,     58.86, F
      Marion Coltrin:      63.33,    55.57,     55.57, F
        Helene Karow:      91.67,    93.71,     91.67, A
       Shonta Bourek:      95.33,    93.29,     93.29, A
      Hyon Anglemyer:      66.67,    52.71,     52.71, F
       Ervin Kenison:      61.67,    62.43,     61.67, D
         Renato Urch:      66.33,    66.71,     66.33, D
      Mikel Burleigh:      92.67,    85.57,     85.57, B
           Val Royal:      93.33,    93.86,     93.33, A
        Jodie Adolfo:      76.67,    79.29,     76.67, C
    Roselee Lienhard:      67.00,    74.29,     67.00, D
    Austin Holznecht:      68.00,    63.29,     63.29, D
        Emelia Toney:      79.67,    88.43,     79.67, C
          Lucy Rhodd:      87.33,    89.57,     87.33, B
          Sacha Chee:      79.67,    74.57,     74.57, C
       Julio Lackner:      65.00,    75.71,     65.00, D
   Salvador Gretzner:      76.00,    71.71,     71.71, C

最佳答案

如果您对代码有疑问,就应该这样做。

public static void processGrades (String input_name, String csv_name, String pretty_name) {
    DecimalFormat decimalFormat = new DecimalFormat(".000000");

    String[][] data = readSpreadsheet(input_name);
    String[][] result = new String[data.length][];
    result[0] = new String[]{"name", "exam_score", "hw_score", "min_score", "grade"};

    // Export to 2D String array
    for(int row = 1; row < data.length; row++) {
        String name = data[row][0] + " " + data[row][1];
        double testAverage = average(data[row], 2, 5);
        double homeworkAverage = average(data[row], 5, 12);
        double min = Math.min(testAverage, homeworkAverage);
        char grade = (char) (74 - ((int) min / 10));
        grade = grade > 'D' ? 'F' : grade;

        result[row] = new String[]{
                name,
                decimalFormat.format(testAverage),
                decimalFormat.format(homeworkAverage),
                decimalFormat.format(min),
                Character.toString(grade)
        };
    }

    // Export 2D array into a csv String
    String csv = "";
    for (int y = 0; y < result.length; y++) {
        for (int x = 0; x < result[y].length - 1; x++) {
            csv += result[y][x] + ",";
        }
        csv += result[y][result[y].length - 1] + "\n";
    }

    // Save String in file
    File file = new File(csv_name);
    try {
        BufferedWriter bw = new BufferedWriter(new FileWriter(file.getAbsoluteFile()));
        bw.write(csv);
        bw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static double average(String[] row, int fromIndex, int toIndex) {
    double total = 0;
    for (int i = fromIndex; i < toIndex; i++) {
        total += Integer.parseInt(row[i]);
    }
    return total / (toIndex - fromIndex);
}

10-08 13:40