текстовый файл разбора Java и обработка каждой строки по-разному - PullRequest
0 голосов
/ 10 мая 2018

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

public class main
{
    BufferedReader in;
    public main() throws FileNotFoundException
    {
         System.out.println("please enter the name of the text file you wish you import. Choose either inputs or lotsainputs. Nothing else");
        Scanner keyboard = new Scanner(System.in);
        String filename = keyboard.nextLine();
        File file = new File(filename);

        System.out.println("You have loaded file: \t\t"+filename);
        in = new BufferedReader(new FileReader(file));

        Scanner inputFile = new Scanner(file);
        String element1 =  inputFile.nextLine().toUpperCase();
        try
        {
            while ((element1 = in.readLine()) != null)
            {      
                System.out.println("Line to process:\t\t"+element1);
                myCalculations(element1);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

Первый текстовый файл выглядит так:

200 345 
36

Второй текстовый файл выглядит так:

200 345 
36
45
36
21

Вот метод, который называется:

public static void myCalculations(String s)
    {
        String[] items = s.split(" ");
        int[] results = new int[100];
        String errorMessage = "that's a wrap!";
        for (int i = 0; i < items.length; i++) 
        {
            try {
                int stuff = Integer.parseInt(items[i]);
                results[i] = stuff;
            }
            catch (NumberFormatException nfe) {
                System.out.println(results);
                System.out.println(errorMessage);   
            }
        }
        int health = result[0];
        int power = result[1]; 
        int days = result[2];
        some calculations....
        returns new health and power of the car. 
        same calculations but results[3] as the time period
        returns new health and power of car
        etc....
    }

Метод анализирует целые числа и помещает их в массив результатов [].

Допустим, первые два числа текстового файла - это здоровье и мощность автомобиля. Каждое исходящее число - это дни между гонками. В каждой гонке наблюдается ухудшение состояния автомобиля и двигателя, причем степень износа составляет фактор дней между гонками.

Я использовал результаты [3] [4] & [5] и жестко закодировал ухудшение и распечатал результаты, и это работает, но это довольно дерьмо. Как бы я улучшить этот метод? Я копирую и вставляю «расчеты». Как мне взять первую строку, а затем поместить следующие строки в отдельный цикл?

в идеале количество дней в текстовом файле может варьироваться. то есть, может быть 5 гонок или может быть 3, и программа будет обрабатывать оба случая.

1 Ответ

0 голосов
/ 10 мая 2018

попробуйте что-то вроде

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Scanner;

public class Main {


    public static void main(String[] args) throws FileNotFoundException {

        System.out.println(
                "please enter the name of the text file you wish you import. Choose either inputs or lotsainputs. Nothing else");
        Scanner keyboard = new Scanner(System.in);
        String filename = keyboard.nextLine();
        File file = new File(filename);


        System.out.println("You have loaded file: \t\t" + filename);
        BufferedReader in = new BufferedReader(new FileReader(file));

        String element1 = null;
        try {
            element1 = in.readLine();
        }catch (Exception e) {
            // TODO: handle exception
        }

        String[] firstLine = element1.split(" ");

        Arrays.stream(firstLine).forEach(fl -> {
            System.out.println("First line element: " + fl);
        });


        //Do the staff
        String otherElement = null;


        try {
            while ((otherElement = in.readLine()) != null) {
                System.out.println("Line to process:\t\t" + otherElement);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

результат для файла:

1 2
3
5
7

есть

You have loaded file:       
First line element: 1
First line element: 2
Line to process:        3
Line to process:        5
Line to process:        7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...