JavaFX Прокрутите массив и найдите совпадение, в противном случае попробуйте снова - PullRequest
0 голосов
/ 23 мая 2018

У меня есть проект интернет-магазина на основе графического интерфейса.Я читаю в файле, анализирую его и сохраняю в массив.Формат файла таков: 11111, «заголовок», 9,90

11111 - это идентификатор книги, «заголовок» - это заголовок, а 9,90 - это цена.

В настоящее время у меня есть 3 класса в моем проекте.1 класс для ввода / вывода, 1 класс для кода графического интерфейса магазина книг и еще один для всплывающих окон при нажатии определенных кнопок.

В коде графического интерфейса я проверяю чтение файла в String [] fileArrayи затем перебирайте его, пока не будет найдено совпадение (с вводом TextField String bookIds = bookIdinput.getText () )

Я могу успешно найти совпадение и продолжить с остальнымикода, но когда нет совпадения, я получаю сообщение об ошибке: Исключение в потоке «Поток приложения JavaFX» java.lang.NullPointerException в windowDisplay.lambda $ start $ 3 (windowDisplay.java: ###), этострока кода for(int i=0; i<fileArray.length; i++)

Если совпадений нет, то должно появиться всплывающее окно с сообщением о том, что bookID не найден.

Ниже приведен фрагмент кода GUI.

    public class windowDisplay extends Application

{

    // Variable declarations
    private String[] fileArray = null;
    private String holdStr = "";
    private Stage mainWindow;
    private boolean matchFound = false;
    private int count = 1;
    private int lineItems = 1;
    private double totalAmount = 0.0;
    private double subTotal = 0.0;


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


    @Override
    public void start(Stage primaryStage) throws Exception
    {

        // OMITTED CODE

        // These TextFields show the output depending on the input TextField's.
        itemInfoOutput.setDisable(true);
        orderSubtotalOutput.setDisable(true);

        // Process item button.
        processItem.setText("Process Item #" + count);
        processItem.setMinWidth(106);
        processItem.setOnAction(e ->
        {

            int numItems = Integer.parseInt(numItemInput.getText());
            lineItems = numItems;
            String bookIDs = bookIdInput.getText();
            int qtyItems = Integer.parseInt(qtyItemInput.getText());

            // Read file and check for Book ID
            fileArray = bookStoreIO.readFile(bookIDs);

            // Loop through array to find match or no matches
            for(int i=0; i<fileArray.length; i++)
            {
                // If there is a match in book ID
                if (fileArray[i].equals(bookIDs))
                {
                    double price = Double.parseDouble(fileArray[i + 2]); // Price is in the i+2 position
                    double discount = calculateDiscount(qtyItems);
                    totalAmount = calculatePrice(qtyItems, price);
                    itemInfoOutput.setText(fileArray[i] + " " + fileArray[i + 1] + " " + "$" + price + " " +
                            qtyItems + " " + discount + "%" + " " + "$" + df.format(totalAmount));

                    // Disable processItem Button if there is a match and enable confirmItem Button
                    processItem.setDisable(true);
                    confirmItem.setDisable(false);

                    matchFound = true;
                }
            }

            if(matchFound == false)
                System.out.println("No match found!");

        });
    }

    // OMITTED CODE


    // This method calculates the discount depending on the quantity of items
    public static double calculateDiscount(int inputQty){return null;}

    // This methdod calculates the price with the discount
    public static double calculatePrice(int inputQty, double price){return null;}

}

Этот класс читает файл и возвращает массив с содержимым этого файла (разделенный разделителем ",").

public class bookStoreIO
{

    // This method reads the input file "inventory.txt" and saves it into an array.
    public static String[] readFile(String stringIn)
    {
        try
        {
            String nextLine;
            String[] fIn;

            // Read file
            BufferedReader br = new BufferedReader(new FileReader("inventory.txt"));

            while((nextLine = br.readLine()) != null)
            {
                fIn = nextLine.split(", "); // Split when ", " is seen
                if(stringIn.equalsIgnoreCase(fIn[0]))
                {
                    br.close(); // Close file
                    return fIn; // Return array
                }

            }

        }

        // Just in case file isn't found
        catch(IOException e)
        {
            System.out.println("File not found.");
        }
        return null;
    }

Я прошу прощения, если это кажется грязнымЯ все еще новичок в JavaFX и Java-программировании.Если вы считаете, что требуется больше кода, пожалуйста, дайте мне знать!

РЕДАКТИРОВАТЬ: я улучшил некоторые имена переменных и удалил цикл for.У меня все еще проблемы с проверкой, когда нет совпадений.

public class windowDisplay extends Application

{

       // Variable declarations
private String[] fileArray = null;
private Stage mainWindow;
private boolean matchFound = false;
private int count = 1;
private int lineItems = 1;
private double totalAmount = 0.0;
private double subTotal = 0.0;

private int itemQty = 0;
private int idBook = 0;
private String bookTitle = "";
private double bookPrice = 0.0;
private double discountAmount = 0.0;
private String resultOrder = "";


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


    @Override
    public void start(Stage primaryStage) throws Exception
    {

        // OMITTED CODE

        // These TextFields show the output depending on the input TextField's.
        itemInfoOutput.setDisable(true);
        orderSubtotalOutput.setDisable(true);

          // Process item button.
    processItem.setText("Process Item #" + count);
    processItem.setMinWidth(106);
    processItem.setOnAction(e ->
    {

        int numItems = Integer.parseInt(numItemInput.getText());
        lineItems = numItems;
        String bookIDs = bookIdInput.getText();
        itemQty = Integer.parseInt(qtyItemInput.getText());

        // Read file and check for Book ID
        fileArray = bookStoreIO.readFile(bookIDs);
        idBook = Integer.parseInt(fileArray[0]);
        bookTitle = fileArray[1];
        bookPrice = Double.parseDouble(fileArray[2]);

        discountAmount = calculateDiscount(itemQty);
        totalAmount = calculatePrice(itemQty, bookPrice);
        itemInfoOutput.setText(idBook + " " + bookTitle + " $" + bookPrice + " " + itemQty + " " + discountAmount
        + "%  $" + df.format(totalAmount));


        itemInfo.setText("Item #" + count + " info:");

        processItem.setDisable(true);
        confirmItem.setDisable(false);
        matchFound = true;

        if(matchFound == false)
            System.out.println("not found");
    });

    // OMITTED CODE


    // This method calculates the discount depending on the quantity of items
    public static double calculateDiscount(int inputQty){return null;}

    // This method calculates the price with the discount
    public static double calculatePrice(int inputQty, double price){return null;}

}

У меня также возникают проблемы при сохранении

itemInfoOutput.setText(idBook + " " + bookTitle + " $" + bookPrice + " " + itemQty + " " + discountAmount
        + "%  $" + df.format(totalAmount)); 

в массив String или String для распечатки списка всех соответствующих совпадений (вместе с их идентификатором книги, названием книги, книга Цена, количество, скидка и общая стоимость).

Пример показан ниже: введите описание изображения здесь

РЕДАКТИРОВАТЬ 2: Правое полеосновной графический интерфейсВнизу слева находится то, что отображается при вводе неправильной книги (2-й порядок).Вверху слева - длина массива.

// Process item button.
    processItem.setText("Process Item #" + count);
    processItem.setMinWidth(106);
    processItem.setOnAction(e ->
    {

        int numItems = Integer.parseInt(numItemInput.getText());
        lineItems = numItems;
        String bookIDs = bookIdInput.getText();
        itemQty = Integer.parseInt(qtyItemInput.getText());

        // Read file and check for Book ID
        fileArray = bookStoreIO.readFile(bookIDs);

        for(int i=0; i<fileArray.length; i++)
            System.out.println(fileArray[i]);
        if(fileArray.length >= 3)
        {
            idBook = Integer.parseInt(fileArray[0]);
            bookTitle = fileArray[1];
            bookPrice = Double.parseDouble(fileArray[2]);

            discountAmount = calculateDiscount(itemQty);
            totalAmount = calculatePrice(itemQty, bookPrice);
            resultOrder = itemInfoOutput.getText();

            itemInfoOutput.setText(idBook + " " + bookTitle + " $" + bookPrice + " " + itemQty + " " + discountAmount
                    + "%  $" + df.format(totalAmount));
            resultOrder = idBook + " " + bookTitle + " $" + bookPrice + " " + itemQty + " " + discountAmount
             + "% $" + df.format(totalAmount);



            itemInfo.setText("Item #" + count + " info:");

            processItem.setDisable(true);
            confirmItem.setDisable(false);
        }
        else
            alertBox.confirmDisplay("Book ID " + idBook + " not in file");
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...