簡體   English   中英

如何從文件中讀取行並將行分配給數組?

[英]How to read lines from a file and assign the lines to an array?

目前,我正在嘗試讀取.dat文件並將各種行分配到數組中。 該文件將提供諸如“ a100”和“ q80”之類的項目,我必須按字母將其分為幾類,然后將不同的等級作為每個類別的數組。 現在,這就是我所擁有的,但是當我嘗試各種事情時,我遇到了很多運行時錯誤。 我在這里想念什么嗎?

我遇到的一些錯誤:

  1. 當我執行案例'P'時,它打印出來:WeightedGrades @ 13105f32
  2. 當我嘗試執行情況C,A或D時,會發生這種情況:線程“ main”中的異常java.lang.NoSuchMethodError: WeightedGrades.deleteGrade(Ljava/lang/String;)Z

加權成績班:

public class WeightedGrades {
   private String name;
   private int numGrades;
   private String[] grades;
   public static final double ACTV_WT = 0.05, QUIZ_WT = 0.10, PROJ_WT = 0.25, EXAM_WT = 0.30, FINAL_EXAM_WT = 0.30;

   public WeightedGrades(String nameIn, int numGradesIn, String[] gradesIn) {
      name = nameIn;
      numGrades = numGradesIn;
      grades = gradesIn;
   }

   public String getName() {
      return name;
   }
   public int getNumGrades() {
      return numGrades;
   }
   public String[] getGrades() {
      return grades;
   }
   public double[] gradesByCategory(char categoryChar) {
      int count = 0;
      for (int i = 0; i < grades.length; i++) {
         if (categoryChar == grades[i].charAt(0)) {
            count++;
         }
      }
      double[] gradesNew = new double[count];
      count = 0;
      for( int i = 0; i < numGrades; i++) {
         if (categoryChar == grades[i].charAt(0)) {
            gradesNew[count] = Double.parseDouble(grades[i].substring(1));
            count++;
         }
      }
      return gradesNew;
   }
   public String toString() {
      String result = "\tStudent Name: " + getName()
         + "\n\tActivities: " + gradesByCategory('A')
         + "\n\tQuizzes: " + gradesByCategory('Q')
         + "\n\tProjects: " + gradesByCategory('P')
         + "\n\tExams: " + gradesByCategory('E')
         + "\n\tFinal Exam: " + gradesByCategory('F')
         + "\n\tCourse Average: " + courseAvg();
      return result;
   }
   public void addGrade(String newGrade) {
      if (numGrades >= grades.length) {
         increaseGradesCapacity();
      }
      grades[numGrades] = newGrade;
      numGrades++;
   }
   public boolean deleteGrade(String gradeDelete) {
      boolean delete = false;
      int deleteIndex = -1;
      for (int i = 0; i < numGrades; i++) {
         if (gradeDelete.charAt(0) == grades[i].charAt(0) && 
            Double.parseDouble(gradeDelete.substring(1)) 
            == Double.parseDouble(grades[i].substring(1))) {
            deleteIndex = i;
         }
      }   
      if (deleteIndex > -1) {
         for (int i = deleteIndex; i < numGrades - 1; i++) {
            grades[i] = grades[i + 1];
         }
         grades[numGrades - 1] = "";
         numGrades--;
         return true;
      }
      else {
         return false;
      }
   }
   public void increaseGradesCapacity() {
      String[] temporary = new String[grades.length + 1];
      for (int i = 0; i < grades.length; i++) {
         temporary[i] = grades[i];
      }
      grades = temporary;
   }
   public double average(double[] newArray) {
      if (newArray.length == 0) {
         return 0.0;
      }
      double sum = 0;
      double average = 0;
      for ( int i = 0; i < newArray.length; i++) {
         sum += newArray[i];
         average = sum / newArray.length; 
      }
      return average;
   }
   public double courseAvg() {
      double actvAvg = 0.0;
      double quizAvg = 0.0;
      double projAvg = 0.0;
      double examAvg = 0.0;
      double finalAvg = 0.0;
      double avg = 0.0; 
      if (!numGrades.length == 0) {
         avg = actvAvg * ACTV_WT + quizAvg * QUIZ_WT + projAvg * PROJ_WT + examAvg * EXAM_WT + finalAvg * FINAL_EXAM_WT;
      }   
      return avg;
   }
}

二等

import java.util.Scanner;
import java.io.IOException;

public class WeightedGradesApp {

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

      String name = "";
      int numGrades = 0;
      String[] grades = new String[13];
      String code =  "";
      String gradeAdd = "";
      String gradeDelete = "";
      String categoryIn = "";

      WeightedGrades student = new WeightedGrades(name, numGrades, grades);
      Scanner userInput = new Scanner(System.in);

      if (args == null) {
         System.out.println("File name was expected as a run argument.");
         System.out.println("Program ending."); 
         return;
      }
      else {
         System.out.println("File read in and WeightedGrades object created.");
         System.out.println("");
         System.out.println("Player App Menu");
         System.out.println("P - Print Report");
         System.out.println("C - Print Category");
         System.out.println("A - Add Grade");
         System.out.println("D - Delete Grade");
         System.out.println("Q - Quit ");
         do {
            System.out.print("Enter Code [P, C, A, D, or Q]: ");
            code = userInput.nextLine();
            if (code.length() == 0) {
               continue;
            }
            code = code.toUpperCase();
            char codeChar = code.charAt(0);
            switch (codeChar) {   
               case 'P':
                  System.out.println(student.toString());
                  break;
               case 'C':
                  System.out.print("      Category: ");
                  categoryIn = userInput.nextLine();
                  char categoryChar = categoryIn.charAt(0);
                  System.out.println(student.gradesByCategory(categoryChar));
                  break;
               case 'A':
                  System.out.print("      Grade to add: ");
                  gradeAdd = userInput.nextLine();
                  student.addGrade(gradeAdd);
                  break;
               case 'D':
                  System.out.print("      Grade to delete: ");
                  gradeDelete = userInput.nextLine();
                  boolean isDeleted = student.deleteGrade(gradeDelete);
                  if (isDeleted) {
                     System.out.println("      Grade deleted");
                  }
                  else {
                     System.out.println("      Grade not found");
                  }   
                  break;
               case 'Q':
                  break;      
               default:
            }
         } while (!code.equalsIgnoreCase("Q"));
      }      
   }
}

對於初學者,由於以下原因,您的代碼無法編譯

if (!numGrades.length == 0) { 

這是因為numGrades是一個int它是一個原始類型,因此沒有任何屬性length 我假設你想要的是

if (numGrades != 0) {

另外,正如我提到的那樣,您不是在處理文件的讀取,而是提供文件名,但從未真正讀取過,我建議您看一下File IO上的Java教程。

在此注意事項上,請執行check args == null這將不會檢查是否沒有提供args,請嘗試。 您想要的是args.length == 0

關於另一個錯誤,我什至不知道您是如何產生的……我假設它正在使用該類的較舊的編譯版本,而該類尚未編寫方法。

暫無
暫無

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

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