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

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

Мне удалось прочитать файл из локального хранилища и вывести его на консоль, но, как ни странно, он выводит детали шесть раз, что соответствует количеству переменных, которые у меня есть. Есть ли простое исправление для этого?

Кроме того, какую технологию я бы использовал для генерации идентификатора для каждой записи, которая будет увеличиваться с каждой записью? например, 1, 2 ... 11, 12, 13 и т. д.

Я читал о методе getter для сопоставления членам-элементам данных и методам toString (), но, похоже, не могу понять его достаточно для реализации это в моей программе. Существуют ли подобные проекты, которые помогли бы мне понять, как эти технологии работают и помогли бы мне?

import java.io.File;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Scanner;

public class ApplicationRunner {
static void menu() {  
    try {
        char quit = 'n';
        String menuInput;
        int menuChoice = 0;

        Scanner scan = new Scanner(System.in);

        while (quit != 'y') {
            System.out.println(
              "\n List traders.......1"
            + "\n Select trader......2"
            + "\n Search locations...3"
            + "\n Search services....4"
            + "\n Exit...............0"
            + "\n\n Enter choice:>");

            menuChoice = scan.nextInt();

        switch (menuChoice) {
            case 1:
                listTraders();
                break;
            case 2:
                selectTrader();
                break;
            case 3:
                searchLocation();
                break;
            case 4:
                searchServices();
                break;
            case 0:
                System.out.println("Exiting...");
                System.exit(0);
                break;
            default:
                System.out.println("Invalid menu selection.");
        }

        System.out.println("Quit? y/n");
        menuInput = scan.next().toLowerCase();
        quit = menuInput.charAt(0);
        }   
    }

    catch (Exception inputError)
    {
        System.out.println("\nInvalid input value. Valid values 0-4.");
        menu();
    }  
}

static void listTraders() {
    String dataFile = System.getProperty("user.dir") + File.separator + "traders.txt";

    try {
        BufferedReader br = new BufferedReader(new FileReader(dataFile));

        String line = null;        

        while ((line = br.readLine()) != null) {
            String[] details = line.split(":");

            String companyName = details[0];
            String location = details[1];
            String services = details[2];
            String description = details[5];
            int numEmployees = Integer.parseInt(details[3]);
            double dailyRate = Double.parseDouble(details[4]);

            for (String printDetails : details) {

                System.out.println(companyName + "\t" + location + "\t" + services +
                        "\t" + description + "\t" + numEmployees + "\t" + dailyRate);
            }
        }

        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

static void selectTrader() {

}

static void searchLocation() {

}

static void searchServices() {

}

public static void main(String[] args) {
    menu();
}

}

Файл трейдеров, который используется в этой программе - https://gist.github.com/senotajs/0011c93460f0e9603a53858de15f8639

1 Ответ

0 голосов
/ 26 марта 2020

В следующем фрагменте кода вы запускаете для l oop для длины массива details. Массив details содержит 6 переменных, поэтому вы видите его напечатанным 6 раз. Чтобы исправить это, удалите l oop и просто напечатайте переменные.

    for (String printDetails : details) {

        System.out.println(companyName + "\t" + location + "\t" + services +
                "\t" + description + "\t" + numEmployees + "\t" + dailyRate);
    }
...