簡體   English   中英

如何將字符串輸入到2D數組中

[英]How to input Strings into a 2D array

我有這個代碼,我需要將字符串'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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM