JavaFX循环遍历数组并找到匹配项,否则再试一次

时间:2018-05-23 01:13:08

标签: java javafx

我有一个基于GUI的电子商店项目。我在一个文件中读取并解析它并将其保存到一个数组中。 文件格式如下: 11111," title",9.90

11111是书名,"标题"是标题,9.90是价格。

我目前在我的项目中有3个班级。输入/输出1个类,Book store GUI代码1个类,单击特定按钮时弹出框中的另一个类。

在GUI代码中,我检查将文件读入String [] fileArray,然后循环遍历它,直到匹配(使用TextField输入 String bookIds = bookIdinput.getText()

我能够成功获得匹配并继续使用剩下的代码,但是当没有匹配时,我会收到错误:线程异常&#34; JavaFX应用程序线程&# 34; windowDisplay.lambda上的java.lang.NullPointerException $ 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;}

}

此类读取文件并返回一个包含该文件内容的数组(一旦被&#34;,&#34;分隔符拆分)。

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数组,打印出所有相应匹配的列表(以及他们的书籍ID,书名,书价,数量,折扣和总价)。

示例如下所示: enter image description here

编辑2:The right box is the main GUI. The bottom left box is what shows up when a wrong book is entered (on the 2nd order). The top left is the length of the array.

// 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");
    });

0 个答案:

没有答案