我的数组打印空



在方法中,我让所有这些初始化

Scanner input = new Scanner(System.in);
    File file = new File("order.dat");
    File viewOrder = new File("ViewOrder.dat");
    String orderNo, itemNo, itemNameHolder, qtyHolder, priceHolder, status;
    int hold, count = 0, countArray = 0;
    double tempPriceHolder, totalPrice = 0;
    String tempStatus = "";
    String[] holdItemNo = null;
    String[] holdName = null;
    Integer[] holdQty = null;
    Double[] holdTotal = null;
    String[] holdStatus = null;

之后,我尝试读取文件中的所有内容并将内容存储到 holdX 数组中

        try {
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        String line = null;
        while ((line = br.readLine()) != null) {
            String tokens[] = line.split(";");
            orderNo = tokens[0];
            itemNo = tokens[1];
            itemNameHolder = tokens[2];
            qtyHolder = tokens[3];
            priceHolder = tokens[4];
            status = tokens[5];
            if (orderNo.equalsIgnoreCase(userOrderNo)) {
                tempPriceHolder = Double.parseDouble(priceHolder);
                hold = Integer.parseInt(qtyHolder);
                tempPriceHolder = tempPriceHolder * hold;
                totalPrice += tempPriceHolder;
                countArray++;
                holdItemNo = new String[countArray];
                holdName = new String[countArray];
                holdQty = new Integer[countArray];
                holdTotal = new Double[countArray];
                holdStatus = new String[countArray];                
                if (status.matches("s")) {
                    tempStatus = "Success";
                } else if (status.matches("p")) {
                    tempStatus = "Partially Full";
                } else if (status.matches("o")) {
                    tempStatus = "Out of Stock";
                }
                holdItemNo[count] = itemNo;
                holdName[count] = itemNameHolder;
                holdQty[count] = hold;
                holdTotal[count] = tempPriceHolder;
                holdStatus[count] = tempStatus;
                count++;
            }
        }
    } catch (Exception e) {
        System.out.println("Error");
    }

最后,我将所有数组写入一个新文件。

        System.out.printf("%s %15s %15s %10s %10sn", "Item No", "Description", "Quantity", "Total", "Status");
    for (int i = 0; i < holdItemNo.length; i++) {            
        System.out.printf("n%-11s %-18s %-13s $%-8s %s n", holdItemNo[i], holdName[i], holdQty[i], holdTotal[i], holdStatus[i]);           
    }
    System.out.println("-----------------------------------------------------------------------");
    System.out.printf("%46s %sn", "$", totalPrice);
    System.out.print("Print Order to file Y/N: ");
    String choice = input.next();
    if (choice.equalsIgnoreCase("y")) {
        try {
            PrintWriter bw = new PrintWriter(new FileWriter("ViewOrder.dat", true));
            for (int i = 0; i < holdItemNo.length; i++) {
                bw.write(userOrderNo + ";" + holdItemNo[i] + ";" + holdName[i] + ";" + holdQty[i] + ";" + holdTotal[i] + ";" + holdStatus[i] + "n");
                bw.flush();
            }
            bw.flush();
            bw.close();
            System.out.println("Sucessfull!");
        } catch (Exception e) {
            System.out.println("Error");
        }
    } else if (choice.equalsIgnoreCase("n")) {
        System.out.println("");
    }

但问题是即使我的代码也在工作,但输出不是我预期的。它打印出了打印出的最后一个内容,子价格也有效,但其余部分仅打印出 NULL。 例

此外,它给了我警告 取消引用 array.length 上可能的空指针

for (int i = 0; i < holdItemNo.length; i++) {
                bw.write(userOrderNo + ";" + holdItemNo[i] + ";" + holdName[i] + ";" + holdQty[i] + ";" + holdTotal[i] + ";" + holdStatus[i] + "n");
                bw.flush();
           } 

猜测:

holdItemNo = new String[countArray];

以及以下行:您正在读取循环中创建这些新的数组对象(在条件内(。

所以这个条件可能永远不会成立;因此你的数组保持全部为空。但即使满足条件 - 您可能期望这种情况发生不止一次。你猜怎么着:你正在创建全新的数组。同时扔掉之前创建的数组。每次 if 条件变为 true 时,您都将丢失以前存储的值!

所以答案是:进入循环之前创建数组。这意味着您必须预先查询"要创建多少插槽";或者你必须创建一个有 100 个空插槽的数组;在您的循环中,您必须检查您是否还有空闲插槽。

或者你开始使用java.util.List resp. ArrayList - 它允许动态添加元素。

相关内容

  • 没有找到相关文章

最新更新