Попытка использовать несколько одномерных массивов при чтении файла в Java - PullRequest
0 голосов
/ 07 сентября 2018

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

Вот что у меня есть:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class FileToArrays{
    public static void main(String[] args){
        int[] b = new int [7];
        int[] l = new int [7];
        int[] d = new int [7];
        readFile(b, l, d);

        System.out.println("Sum of First Numbers: "+(b[0]+l[0]+d[0]));
        System.out.println("Sum of Second Numbers: "+(b[1]+l[1]+d[1]));
        System.out.println("Sum of Third Numbers: "+(b[2]+l[2]+d[2]));
        System.out.println("Sum of Fourth Numbers: "+(b[3]+l[3]+d[3]));
        System.out.println("Sum of Fifth Numbers: "+(b[4]+l[4]+d[4]));
        System.out.println("Sum of Sixth Numbers: "+(b[5]+l[5]+d[5]));
        System.out.println("Sum of Seventh Numbers: "+(b[6]+l[6]+d[6]));
        System.out.println("");
    }

    static void readFile(int[] b, int[] l, int[] d){
        try{
            Scanner scnr = new Scanner(new File("Input.txt"));
            int day = 0;
            while(scnr.hasNextLine()){
                String line = scnr.nextLine();
                String [] words = line.split(" ");
                b[day]  = Integer.parseInt(words [0]);
                l[day]  = Integer.parseInt(words [1]);
                d[day]  = Integer.parseInt(words [2]);
                day++;
            }
            scnr.close();
        }catch(FileNotFoundException e){
            System.out.println("Unable To Find File");
        }
    }
}

И текстовый файл («Input.txt») чисел, которые я читаю в массивы, отформатирован как:

800  1000 800
450  845  1200
1800 250  400
0    1500 1800
600  500  1000
700  1400 1700
675  400  900

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

Мне кажется, что проблема может быть чем-то тривиальным, например, ошибкой в ​​моих параметрах и форматировании, или я мог испортить способ чтения файла в массивы.

Тем не менее, любая информация о том, где я напутал, или советы о том, как подойти к подобным задачам в будущем, будет принята с благодарностью.

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Добро пожаловать, Джейк, Код выглядит хорошо, но не работает нормально для предоставленного файла / данных. Если вы внимательно посмотрите, между цифрами больше одного пробела. Вы разбиваете линию на каждом пробеле String [] words = line.split(" "), что дает вам массив больше, чем вы ожидаете.

Лучшим подходом для такого рода «задач» является использование Scanner.next(), которое игнорирует все пробелы. Больше информации о сканере здесь .

Попробуйте заменить ваш код следующим:

        while(scnr.hasNext()){
            b[day]  = scnr.nextInt();
            l[day]  = scnr.nextInt();
            d[day]  = scnr.nextInt();
            day++;
        }
0 голосов
/ 07 сентября 2018

Укажите абсолютный путь для входного файла (например, "C: /Users/input.txt"), он будет работать нормально.

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