需要帮助找到平均值并打印出错误
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 =
,因为它认为您的程序返回了一个有效值。
您需要将异常传播到调用方法,以便它知道出了什么问题。
因为这似乎是一项作业,你应该尝试解决这个问题。如果您对此有疑问,请发表评论。
顺便说一下,请更改以下异常消息:
"Error: " + myName + " (The system cannot find the file specified)"
应该是 "Error: " + myName + " (No such file or directory)"
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
我需要帮助解决这个学校问题。如果您有兴趣,这里是 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 =
,因为它认为您的程序返回了一个有效值。
您需要将异常传播到调用方法,以便它知道出了什么问题。
因为这似乎是一项作业,你应该尝试解决这个问题。如果您对此有疑问,请发表评论。
顺便说一下,请更改以下异常消息:
"Error: " + myName + " (The system cannot find the file specified)"
应该是"Error: " + myName + " (No such file or directory)"
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