【问题标题】:Reading a file then convert it into an array and calculate the numbers读取文件然后将其转换为数组并计算数字
【发布时间】:2017-03-25 01:50:48
【问题描述】:

我有一个名为“results.txt”的文件,其中包含以下值:

0118210:1801:XDCS1094:A:4
0118210:1801:XDCS2034:B+:4
0118210:1801:XDCS1043:C:3
0118024:1801:XDCS1094:B:4
0118024:1801:XDCS2094:A:4

我想读取文件,将其设为数组并删除分隔符并根据 GPA 公式进行计算。这是我对它应该如何工作的想法,但我仍然不太确定,因为我是编程新手。我还尝试在新行上显示我的结果,而不是在一行中显示所有内容,如图所示。任何帮助将不胜感激,这是一项任务。

  public void run()
    {
            try{
                 do{
                       found=0;
                       received = in.readLine();
                       array2=received.split(":");
                               if(received.equals("QUIT")) break;
                                     switch(received.charAt(0))
                                    {
                                             case 'R':
                                                      Register();
                                                      break;
                                             case 'L':
                                                      login();
                                                      break;
                                             case 'V':
                                                      View();
                                                      break;
                                    }
                     }while(!received.equals("QUIT"));
              }
                    catch(IOException e)
                    {
                            e.printStackTrace();
                    }

 public void View() throws IOException
    {
            String grade ="";
            in3 = new BufferedReader(new FileReader("results.txt"));
            while((result = in3.readLine()) !=null)
            {
                    array4=result.split(":");
                            if((array2[1].equals(array4[0])) && (array2[2].equals(array4[1])))
                                    {
                                            grade += array4[2]+" "+array4[3]+" "+array4[4];
                                            found=1;
                                    }
            if(found==0)
            out.println("No Records");
            }
            out.println(grade);
            GCPA();
    }

   public void CGPA() throws IOException{
      String grade = "", cgpa = "";
      int IntValue = 0, IntCH = 0, IntCGPA = 0, IntArray = 0;
     if(array4[3] == "A") {
         IntArray = Integer.parseInt(array4[3]);
         IntValue = IntArray * 4;
    } else if(array4[3] == "B") {
      IntArray = Integer.parseInt(array4[3]);
      IntValue = IntArray * 3;
    }
    IntCH += IntArray;
    IntCGPA = IntValue/IntCH;
    out.println(IntCGPA);
   }

首先,我如何将结果变成一个新行而不是所有内容都在一行中?
添加\n 不起作用,当我运行我的程序时,它不会显示我的IntCGPA 并显示此错误

Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
    at MultiClientHandler1.CGPA(MultiClientHandler1.java:95)
    at MultiClientHandler1.View(MultiClientHandler1.java:81)
    at MultiClientHandler1.run(MultiClientHandler1.java:116)

【问题讨论】:

  • 那么你的问题到底是什么?
  • 好的..首先我如何将结果放入一个新行而不是一行中的所有内容,因为 \n 不起作用,当我运行我的程序时它不显示我的 IntCGPA
  • 您的异常清楚地显示您在第 95 行除以零。您可以自己轻松修复

标签: java arrays file


【解决方案1】:

您只是打印文件数据,而不是存储在数组中。

尝试使用一种方法将文件简单地读入列表。

private List<String[]> getDataArray(String filename) throws IOException {
    List<String[]> data = new ArrayList<>();

    InputStream is = getClass().getClassLoader().getResourceAsStream(filename);
    Scanner sc = new Scanner(is);

    while (sc.hasNextLine()) {
        data.add(sc.nextLine().split(":"));
    }

    return data;
}

用法:

List<String[]> data = getDataArray("results.txt");
for (String[] array : data) {
    System.out.println("1: " + array[1]); // for example
}

我还试图让我的结果显示在新行中,而不是所有内容都显示在一行中...\n 不起作用

您的代码未使用\n

String grade ="";

while (...) {
    grade += array4[2]+" "+array4[3]+" "+array4[4];
}

out.println(grade);

试试这个模式。

StringBuilder grade = new StringBuilder();

while (...) {
    // Add columns from array
    grade
        .append(array4[2]).append(" ")
        .append(array4[3]).append(" ")
        .append(array4[4]);

    // End line
    grade.append("\n");
}

out.println(grade.toString());

无论如何,您的代码都会引发异常并停止。

Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
    at MultiClientHandler1.CGPA(MultiClientHandler1.java:95)

它会告诉你类、方法和行号 -> 在 MultiClientHandler1.CGPA(MultiClientHandler1.java:95),所以你看看那里

IntCGPA = IntValue/IntCH;

然后想一想,“我为什么要除以零?”然后你就看到了

IntCH = 0;
IntCH += IntArray;

这意味着IntArray 在某些时候必须为零!

不太确定您在这里尝试的是什么。

 if(array4[3] == "A") { // This is the string "A"
     IntArray = Integer.parseInt(array4[3]); // So, you can't parse an int from "A"

还有提示How do I compare strings in Java?

试试这个

int ch = 0;
int credits = 0;
final int baseCredits = Integer.parseInt(array4[4]);
String grade = array4[3];
switch (grade) {
    case "A":
        credits = baseCredits * 4;
        break;
    case "B":
        credits = baseCredits * 3;
        break;
    // etc.
}

int cGPA = baseCredits / credits; 

请不要将您的方法和变量名称大写,我建议您将 intArrayintValue 命名为更具描述性的名称。

【讨论】:

    猜你喜欢
    • 2016-03-11
    • 2017-04-14
    • 2016-11-25
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多