需要帮助找到平均值并打印出错误

Need help finding average and printing out errors

我需要帮助解决这个学校问题。如果您有兴趣,这里是 link:http://go.code-check.org/codecheck/files/14121519036ltx4u6e3i9mtrqynsyhgihr7

当我尝试解决问题时,我打印出了正确的消息,但是出现了问题。我怀疑在 Codecheck 的 Driver 中是 System.out.println("Average = " + message); 之类的东西。所以,我最终得到的结果是

平均值=squeeze.txt没有数值数据

这不是我想要的。如果 Driver 给我这个问题,我应该如何解决这个问题?这是我目前拥有的:

import java.io.*;

import java.util.*;

public class Average {

    double total = 0;
    int count = 0;
    Scanner in;
    String myName;
    public Average(String name){
        myName = name;
        try{
            in = new Scanner(new File(name));
        }
        catch (Exception e){
            System.out.println("Error: " + myName + " (The system cannot find the file specified)");
        }
    }

    public String scanDataAndCalculateAverage(){
        try{
            if (!in.hasNext())
                throw new Exception(myName + " is empty");
            else 
                while (in.hasNextLong()){
                    total += in.nextLong();
                    count++;
                }
            if (in.hasNext()){
                throw new Exception(myName + " does not have numerical data");
            }
            else return "" + (total / count);
        }
        catch (Exception e){
            return e.getMessage();
        }
    }

}

编辑:我的新构造函数:

public 平均值(字符串名称)抛出异常{

    myName = name;
    try{
        in = new Scanner(new File(name));
    }
    catch (Exception e){
        throw new Exception("Error: " + myName + " (No such file or directory)");
    }
}

看起来输入文件中包含的内容不是有效的 long。看到你有这些行:

while (in.hasNextLong()){
    total += in.nextLong(); 
    count++;
}
if (in.hasNext()){
    throw new Exception(myName + " does not have numerical data");
}

因此,如果您的文件与 long 不同,您将退出循环,然后 if 将向您发送您发布的消息。

要找到导致问题的确切原因,请更改此行:

throw new Exception(myName + " does not have numerical data");

对此:

throw new Exception(myName + " does not have numerical data: (" + in.next() + ")");

你的代码的问题是这部分:

catch (Exception e) {
    return e.getMessage();
}

您正在捕获任何异常并将消息作为字符串返回。因此,方法 scanDataAndCalculateAverage 的调用完成 "normally" 并且 "code checker" 在返回的字符串前面写入 Average =,因为它认为您的程序返回了一个有效值。

您需要将异常传播到调用方法,以便它知道出了什么问题。

因为这似乎是一项作业,应该尝试解决这个问题。如果您对此有疑问,请发表评论。

顺便说一下,请更改以下异常消息:

  1. "Error: " + myName + " (The system cannot find the file specified)" 应该是 "Error: " + myName + " (No such file or directory)"
  2. myName + " does not have numerical data" 应该是 myName + "does not have numeric data"

如果您使用您的消息,检查将不会通过。奇怪,作业中提到了第一个,但它使用另一个不同的来进行检查。

这是整个检查的预期输出:

Average = 49.91791791791792
squeeze.txt does not have numeric data
empty.txt is empty
Error: notThere.txt (No such file or directory)
Average = 0.0