gpt4 book ai didi

java - 使用逗号作为分隔符使用文本文件中的数据构造对象时遇到问题

转载 作者:行者123 更新时间:2023-12-01 11:36:42 25 4
gpt4 key购买 nike

我在通过从 txt 文件读取的构造函数创建 Inventory 对象时遇到问题。

这是文件:

1165,4.25,15
1305,1.80,42
1345,12.56,16
1388,7.42,30
1480,6.54,80
1495,8.36,48
1560,15.27,65

所以我试图将“1165”放入第一个变量中,然后将“4.25”放入下一个变量中,等等。所以逗号是分隔符。当我运行程序时,它在第一次通过 main 中的 while 循环后抛出异常,并且变量只是被分配“1”、“1.0”和“6”,而不是获取整个数字。

import java.util.Scanner;
import java.io.*;
import java.util.regex.*;

public class Proj2 {
public static void main(String[] arg) throws IOException {

Scanner soldScan;
Scanner invScan;

soldScan = new Scanner (new File("SoldSorted.txt"));
invScan = new Scanner (new File("Inventory.txt"));
invScan = invScan.useDelimiter(Pattern.compile(",|\\s*"));
int count =0;
while (soldScan.hasNext()){

Sales x = new Sales(soldScan.next());
Inventory y = new Inventory(invScan.nextInt(),invScan.nextDouble(),invScan.nextInt());

x.printSales();
y.printInv();
count++;
}
for (int i=0;i<count;i++){

}

}
}
public class Inventory {
int productCode;
double price;
int quantityOnHand;

public Inventory(int code, double cost, int inStock) {
productCode = code;
price = cost;
quantityOnHand = inStock;
}

public void setCode(int code) {
productCode = code;
}

public void setPrice(double price) {
this.price = price;
}

public void setInStock(int inStock) {
quantityOnHand = inStock;
}

public int getCode() {
return productCode;
}

public double getPrice() {
return price;
}

public int getInStock() {
return quantityOnHand;
}

public int postSale(int sold) {
quantityOnHand = quantityOnHand - sold;
return quantityOnHand;
}

public void printInv(){
System.out.println("Product Code: " + productCode);
System.out.println("Price: " + price);
System.out.println("Quantity on Hand: " + quantityOnHand);
}
}

这是输出:

Product Code: 1165
Quantity Sold: 24
Product Code: 1
Price: 1.0
Quantity on Hand: 6

Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:840)
at java.util.Scanner.next(Scanner.java:1461)
at java.util.Scanner.nextInt(Scanner.java:2091)
at java.util.Scanner.nextInt(Scanner.java:2050)
at Proj2.main(Proj2.java:18)

最佳答案

看起来您的正则表达式中有一个错误。 * 是 0 个或多个匹配的通配符,因此“,|\\s*”将匹配空字符串。尝试“,|\\s+”。

关于java - 使用逗号作为分隔符使用文本文件中的数据构造对象时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29900867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com