Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Wonderio619
2 / 2 / 0
Регистрация: 25.03.2016
Сообщений: 106
1

Подкиньте идею для решения задачи

15.06.2018, 19:28. Просмотров 816. Ответов 6
Метки нет (Все метки)

Есть файл, который содержит вещественные(дробные) числа, разделенные пробелом. Например, "3.1415 3.22 555.1" и т.д.
Округлить числа до целых и записать через пробел во второй файл.
Закрыть потоки.

Округлить числа и записать в другой файл не проблема. Но я вот думаю, каких их "вытянуть" из файла и в виде double.
То есть, нужно считывать от начала до пробела, потом от пробела до следующего пробела, и это считанное переганять в double, ну а потом округлять.
Как можно такое сделать ? Именно уловить этот "диапазон" между двумя пробелами и принимать его как double переменную ?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2018, 19:28
Ответы с готовыми решениями:

Подскажите литературу для решения задачи!
Добрый день! Подскажите, что можно прочитать для выполнения задания(вложенный...

Как лучше написать класс(т.е. саму структру)для решения слудующей задачи:
Задача. Объявление массивов В языке Java любой объявленный массив является...

Подкиньте ТЗ по многопоточности
Здравствуйте. Недавно закончил изучение этой темы, пытаюсь применить полученные...

Подкиньте идеи как разнообразить программку!
Всем привет! Написал программку быстро, очень сырая! Подскажите, как...

нужно лекарство на идею 4.0.3
вопрос в заголовке! всем спасибо

6
Welemir1
Автоматизируй это!
844 / 573 / 234
Регистрация: 30.03.2015
Сообщений: 2,208
15.06.2018, 19:35 2
Лучший ответ Сообщение было отмечено Wonderio619 как решение

Решение

читаем построчно, разбиваем (split) по пробелу и каждый элемент массива кастуем в дабл, округляем и т.д.
1
Wonderio619
2 / 2 / 0
Регистрация: 25.03.2016
Сообщений: 106
15.06.2018, 21:42  [ТС] 3
Welemir1,
Думаю, это оно ))
Попробую сделать ...

Добавлено через 1 час 51 минуту
Welemir1, получилось !)
Может немного намудрил, но вроде норм.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
 
        String file1 = reader.readLine();
        String file2 = reader.readLine();
 
        BufferedInputStream stream1 = new BufferedInputStream(new FileInputStream(file1));
        DataOutputStream stream2 = new DataOutputStream((new FileOutputStream(file2)));
 
        byte[] numbers = new byte[stream1.available()];
        stream1.read(numbers);
        stream1.close();
 
        String value = new String(numbers);
        for (String s : value.split(" ")) {
            long x = Math.round(Double.valueOf(s));
            stream2.writeBytes(Long.toString(x)+" ");
        }
        stream2.close();
    }
}
Спасибо за идею
0
Aviz__
566 / 404 / 124
Регистрация: 17.02.2014
Сообщений: 2,855
16.06.2018, 08:44 4
делай split(".") numbers и 17 строка упростится
0
iSmokeJC
Модератор
Эксперт Java
1022 / 837 / 401
Регистрация: 21.10.2017
Сообщений: 2,848
16.06.2018, 17:32 5
А не проще
Java
1
2
3
4
5
Scanner scan = new Scanner(new File ("test.txt"));
while(scan.hasNextDouble){
double x = scan.nextDouble();
...
}
?
0
reisal78
907 / 657 / 221
Регистрация: 28.04.2013
Сообщений: 1,864
17.06.2018, 23:36 6
Wonderio619,


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
import static java.nio.file.StandardOpenOption.APPEND;
import static java.nio.file.StandardOpenOption.CREATE;
import static java.nio.file.StandardOpenOption.WRITE;
 
public class RoundExample {
    public static void main(String[] args) throws IOException {
        Files.write(Paths.get("output.txt"),
                Files.readAllLines(Paths.get("input.txt")).stream().flatMap((Function<String, Stream<String>>) line ->
                        Arrays.stream(line.split("\\s+")).parallel().map(value -> String.valueOf(Math.round(Double.valueOf(value))))).collect
                        (Collectors.toList()), CREATE, WRITE, APPEND);
    }
}
Только не просите объяснить что тут происходит

Добавлено через 14 минут
upd: пишет в строку, через пробел

Java
1
2
3
4
5
6
7
8
9
10
11
public class RoundExample {
    public static void main(String[] args) throws IOException {
        Files.write(
                Paths.get("output.txt"),
                Files.readAllLines(Paths.get("input.txt")).stream().flatMap(line ->
                        Arrays.stream(line.split("\\s+")).parallel().map(value -> String.valueOf(Math.round(Double.valueOf(value))))).collect
                        (Collectors.joining(" ")).getBytes(),
                CREATE, WRITE, APPEND
        );
    }
}
0
Wonderio619
2 / 2 / 0
Регистрация: 25.03.2016
Сообщений: 106
18.06.2018, 01:07  [ТС] 7
reisal78, жесть ))
Моё решение хоть читается легче.
0
18.06.2018, 01:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2018, 01:07

Подкиньте идею решения
{(x^a + y^a)}^{\frac{1}{a}} &gt; {(x^b + y^b)}^{\frac{1}{b}} x &gt; 0, y &gt; 0, 0 &lt; a...

Идею для процедуры подкиньте)
Доброго времени, друзья. Встала задача написать такую вот процедуру:...

Подкиньте идею для программы
Программа должна быть на среднюю или высокую сложность. Говорите любые идеи,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru