我试图解决这个练习问题22只是为了加强我的解决技巧。我已经把答案编码好了。该任务询问"所有生成的y坐标值的总和是多少?(以十进制形式输入xxxxx.x(我不明白这意味着什么))。我的答案是50616.0,但这是错误的。我希望你能帮助我。我不知道我做错了什么,或者只是我不明白xxxxx.x格式的任务是什么意思,我认为它是十进制的,不是吗?
这是我的代码:
import java.io.*;
import java.math.BigDecimal;
public class Problema22 {
public static void main(String args[]) {
File archivo = null;
FileReader fr = null;
BufferedReader br = null;
try {
archivo = new File("C:\plane22.txt");
fr = new FileReader(archivo);
br = new BufferedReader(fr);
String linea;
int index = 0;
int num = 0;
String num2 = "";
BigDecimal sol = BigDecimal.valueOf(0);
while ((linea = br.readLine()) != null) //System.out.println(linea);
{
//System.out.println(linea);
int line1 = linea.indexOf(",");
int line2 = linea.lastIndexOf(",");
int line3 = linea.indexOf("|");
String y1 = linea.substring(line1+1, line3);
String y2 = linea.substring(line2+1, linea.length() );
long sumys = (Integer.parseInt(y1)+ Integer.parseInt(y2))/2;
sol = BigDecimal.valueOf(sumys).add(sol);
//System.out.println(sol);
}
System.out.println(sol);
//count((ArrayList<String>) arr);
} catch (Exception e) {
e.printStackTrace();
}
}
他们希望结果的形式为"xxxxx.x",意思是点前5位,点后1位。你的答案不正确,因为它是一个整数,而他们想要一个浮点数。
我认为您的错误是在这一行中引入的:
long sumys = (Integer.parseInt(y1)+ Integer.parseInt(y2))/2;
如果两个Y坐标之和为奇数,则/2
将截断.5
。正如这条线一样:
170,509|341,54
您为这个计算281
,但中点的Y坐标是281.5
。
我建议将所有数字解析为浮点变量,并将中间结果存储为浮点变量。一个标准的double
应该有尾数来准确地处理这个数据集。