【发布时间】:2019-11-25 13:43:48
【问题描述】:
我正在努力让我的 Java 代码执行以下操作:
库存更新计划。
第一组记录是反映工作日开始时物品库存的主文件。每个主文件记录都包含一个零件编号和一个相应的物料库存数量。让我们假设主文件包含不超过 5 条记录。
第二组记录反映了当天各个项目的交易情况。交易记录包含与主文件记录相同的格式:它们包含项目编号和相应的当天售出的项目总数。输入文件中有未知数量的此类交易记录。
编写一个程序来根据事务文件更新主文件,以便在一天结束时生成新的主文件。库存中剩余少于 10 件的任何货品编号都应附有记录通知。
实际文件如下所示。 (Master.txt)
444 40
111 30
222 15
134 20
353 5
第二个看起来像这样(Sales.txt)
134 03
111 29
353 02
222 10
Master.txt 的更新版本应该是这样的。
444 40
111 1 reorder
222 5 reorder
134 17
353 3 reorder
这是我的代码。
import java.io.*;
import java.util.*;
public class inventoryUpdate {
//Exception included due to mOrganize, sOrganize, and PrintWriter
public static void main(String[] args) throws Exception {
Scanner inKey = new Scanner(System.in);
//Preparing the document based on how many item types were sold.
System.out.println("How many types of products were sold?");
int sold = inKey.nextInt();
int[][] inMaster = fileCheck(mOrganize(), sOrganize(sold), sold);
PrintWriter printFile = new PrintWriter("Master.txt");
printFile.println("Item No. \tQuantity");
for (int i = 0; i<5;i++){
if (inMaster[i][1] < 10){
printFile.printf("%-5s %17s You are low in inventory on this item. Please order more.\n", inMaster[i][0], inMaster[i][1]);
}
else{
printFile.printf("%-5s %17s\n", inMaster[i][0], inMaster[i][1]);
}
}
printFile.close();
System.out.println(Arrays.deepToString(inMaster));
}
private static int[][] mOrganize() throws Exception {
File fileRip = new File("Master.txt");
Scanner masterRead = new Scanner(fileRip);
masterRead.nextLine();
int[][] masterData = new int [5][2];
for (int i = 0; i < 5; i++){
for (int i2 = 0; i2 < 2; i2++){
masterData[i][i2] = masterRead.nextInt();
if (masterData[i][i2] < 10){
masterRead.nextLine();
}
}
}
masterRead.close();
return masterData;
}
private static int[][] sOrganize(int sold) throws Exception{
File fileRip = new File ("Sales.txt");
Scanner saleRead = new Scanner(fileRip);
saleRead.nextLine();
int [][] salesData = new int [sold][2];
for (int i = 0; i < sold; i++){
for (int i2 = 0; i2 < 2; i2++){
salesData[i][i2] = saleRead.nextInt();
}
}
saleRead.close();
return salesData;
}
private static int[][] fileCheck(int[][] master, int[][] sales, int sold){
int columnBase = 0;
for(int i = 0; i < 5; i++){
for(int i2 = 0; i2 < sold; i2++){
if (master[i][columnBase] == sales[i2][columnBase]){
master[i][columnBase + 1] -= sales[i2][columnBase + 1];
}
}
}
return master;
}
}
我的输出如下。
How many types of products were sold?
4
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at inventoryUpdate.mOrganize(inventoryUpdate.java:39)
at inventoryUpdate.main(inventoryUpdate.java:14)
代码似乎在第 14 行中断,并且与我的 inMaster 数组有关。
int[][] inMaster = fileCheck(mOrganize(), sOrganize(sold), sold);
我确信我忽略了某种语法错误,但我没能解决这个问题。
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
感谢您的解释!对此我很抱歉,我已经相应地编辑了我的问题。感谢您的帮助。
-
读取文件时,您同时读取整行和 int by int,选择一个或另一个,但不要同时使用