Чтение чисел из файла и поиск наибольшего

442
20 января 2017, 06:53

Дана задача на нахождение наибольшего числа. Есть файл chisla.txt, содержащий числа 3, 8, 1, 5 в столбик. Необходимо в коде этот файл прочитать и найти наибольшее число.

Я знаю как вывести эти числа на экран и как прописав массив найти в нем наибольшее.
Но как соединить эти две задачи? Как прописать в коде этот "переход" с одной задачи на другую?

import java.io.*;
import java.util.*;
public class X 
{ 
    public static void main(String[] args) 
    {
        BufferedReader in = new BufferedReader(new FileReader("\\chisla.txt"));
        //как их связать?
        int[] array = {...};
        int max = 0;
        for (int i = 0; i < array.length; i++) 
        {
            if (max < array[i])
                max = array[i];
        }
        System.out.println("Max: " + max);
    }
}
Answer 1

Раз всё же начали давать ответы, то с использованием Java 8 можно поступить так:

public static void main(String[] args)
{
    int[] array = null;
    try (BufferedReader in = new BufferedReader(new FileReader("chisla.txt")))
    {
        array = in.lines().mapToInt(Integer::parseInt).toArray();
    }
    catch (IOException | NumberFormatException e)
    {
        e.printStackTrace();
    }
    if (array != null)
    {
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < array.length; i++) 
        {
            if (max < array[i])
            {
                max = array[i];
            }
        }
        System.out.println("Max: " + max);
    }
}

Все строки из файла, а точнее поток строк Stream<String>, возвращаемый in.lines(), привести к потоку int-чисел (IntStream, возвращаемый mapToInt) с помощью Integer.parseInt, после чего этот поток преобразовать в массив int[] с помощью toArray().

Также нужно не забывать закрывать BufferedReader после чтения данных. В представленном коде это делается с помощью конструкции try-with-resources.

А вообще, максимум можно находить и с помощью самого IntStream:

public static void main(String[] args)
{
    try (BufferedReader in = new BufferedReader(new FileReader("chisla.txt")))
    {
        OptionalInt optionalMax = in.lines().mapToInt(Integer::parseInt).max();
        if (optionalMax.isPresent())
        {
            System.out.println("Max: " + optionalMax.getAsInt());
        }
    }
    catch (IOException | NumberFormatException e)
    {
        e.printStackTrace();
    }
}
Answer 2

Вы можете использовать сканер

Scanner scanner = new Scanner(new File("tall.txt"));
int [] array= new int [100];
int i = 0;
while(scanner.hasNextInt()){
   array[i++] = scanner.nextInt();
}

и Ваш метод

BufferedReader in = new BufferedReader(new FileReader("\\chisla.txt"));
int [] array= new int [100];
String s =in.readLine();
int i = 0;
while(s!=null)
{
    try {
       array[i++] = Integer.parseInt(s);
    }
    catch (NumberFormatException ex) {
        continue;
    }
    s = in.readLine();
}
in.close();
Answer 3

В массив закидывать не обязательно, вы просто можете прочитать построчно файл, сравнивая с текущим максимумом:

public static void main(String[] args) throws FileNotFoundException, IOException {
    BufferedReader in = new BufferedReader(new FileReader("\\chisla.txt"));
    String text;
    int max = Integer.MIN_VALUE;
    while ((text = in.readLine()) != null) { // читаем файл построчно
        if (Integer.parseInt(text) > max) // ищем максимум
            max = Integer.parseInt(text);
    }
    System.out.println("Max: " + max);
    in.close();
}
READ ALSO
Как правильно в Main прописать путь к test.fxml и к test.db? Java

Как правильно в Main прописать путь к test.fxml и к test.db? Java

Как правильно прописывать пути к ресурсам в Java? Доброго всем дняВ данный момент изучаю java

473
Разбить строку по тегам и сохранить части в разные переменные

Разбить строку по тегам и сохранить части в разные переменные

У меня есть строка, части которой обрамлены в тегиНапример:

383
Удержать socket открытым с клиентской части

Удержать socket открытым с клиентской части

Есть вот такой код клиентской части:

443
Иконки для уведомлений Notification.Builder

Иконки для уведомлений Notification.Builder

Подскажите, какого формата и какого размера должны быть иконки для методов setSmallIcon() и setLargeIcon() и где их можно скачать? Или есть ли в Android стандартные...

412