Середины сумм Проб. 22 "- я не получаю правильный ответ, потому что я не понимаю, что означает" xxxxx.x ", я думаю - PullRequest
0 голосов
/ 01 июня 2011

Я пытаюсь решить это упражнение Задача 22 * ​​1002 * только для усиления моих навыков решения. Я уже закодировал ответ. Задача спрашивает: «Какова сумма ВСЕХ полученных значений координат 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();

    }
}

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Они хотят получить результат в форме «xxxxx.x», что означает 5 цифр перед точкой и одну после. Ваш ответ неверен, потому что это целое число, а им нужно число с плавающей запятой.

0 голосов
/ 01 июня 2011

Я думаю, что ваша ошибка представлена ​​в этой строке:

long sumys = (Integer.parseInt(y1)+ Integer.parseInt(y2))/2;

/2 будет усекать .5, если сумма двух координат Y нечетна. Как это для этой линии:

170,509|341,54

Вы вычисляете 281 для этого, но координата Y средней точки равна 281.5.

Я предлагаю разобрать все числа в переменные с плавающей запятой и сохранить промежуточные результаты в переменные с плавающей запятой. Стандарт double должен иметь мантиссу для точной обработки этого набора данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...