目前我有这种销售方法,它检查用户输入的名称是否在链表中,如果是,它将从产品类调用销售功能。
private void sell() {
int sellthis = -1;
System.out.print("Name: ");
String selloutput = In.nextLine();
for (int y = 0; y < products.size(); y++){
if (selloutput.equalsIgnoreCase(products.get(y).getName())){
sellthis = y;
}
}
if (sellthis < 0) {
System.out.println("No such product");
}
else {
System.out.println("Selling "+products.get(sellthis).getName());
System.out.print("Number: ");
int sellamount = In.nextInt();
if (products.get(sellthis).has(sellamount)){
cash.add(products.get(sellthis).sell(sellamount));
}
else {
System.out.println("Not enough stock");
}
}
}
现在我正在尝试修改它,以便如果用户输入Pen的值(不区分大小写),它会说“找到多个匹配项”,然后列出找到的匹配项。我知道我的卖方法似乎有点中世纪,抱歉:p
抱歉忘了添加该产品包含这些public Product(String name, int stock, double price) {
this.name = name;
this.stock = stock;
this.price = price;
}
我使用的产品如下
products.add(new Product("Whiteboard Marker", 85, 1.50));
products.add(new Product("Whiteboard Eraser", 45, 5.00));
products.add(new Product("Black Pen", 100, 1.50));
products.add(new Product("Red Pen", 100, 1.50));
products.add(new Product("Blue Pen", 100, 1.50));
答案 0 :(得分:2)
假设您的产品类看起来像这样:
public static class Product {
private final String name;
private final int stock;
private final double price;
public Product(String name, int stock, double price) {
this.name = name;
this.stock = stock;
this.price = price;
}
public String getName() {
return name;
}
}
您可以使用以下代码查找匹配的产品并进行打印:
@Test
public void test() {
List<Product> products = Arrays.asList(new Product("Pen", 10, 1.0),
new Product("Super Pen", 10, 2.0),
new Product("Something Else", 10, 1.0));
String userInput = "Pen";
List<Product> matchingProducts = products.stream()
.filter(p -> p.getName().toLowerCase()
.contains(userInput.toLowerCase()))
.collect(Collectors.toList());
System.out.println("Multiple matched found:");
matchingProducts.stream().forEach(p -> System.out.println(p.getName()));
}
当然这应该只是给你一个想法。你可以,例如从中提取出一种方法。
此代码使用Java 8 Streams过滤掉匹配的产品。
答案 1 :(得分:1)
要达到你的目标,你应该:
如果1可以,那么如果2正常,则返回此产品,然后增加产品组合并将当前产品添加到产品候选列表中。
for (int y = 0; y < products.size(); y++) {
if (selloutput.equalsIgnoreCase(products.get(y).getName())) {
sellthis += 1;
candidates.add(products.get(y));
break;
}else if(products.get(y).getName().toUpperCase().contains(selloutput.toUpperCase())){
sellthis += 1;
candidates.add(products.get(y));
}
}
答案 2 :(得分:0)
您可以尝试在每个产品上使用String#matches()
,以查看输入的片段是否为部分匹配。像这样:
System.out.print("Name: ");
List<Product> matches = new ArrayList<>();
String selloutput = In.nextLine().toLowerCase();
for (int y=0; y < products.size(); y++) {
String product = products.get(y).getName().toLowerCase();
String pattern = ".*" + selloutput + ".*";
if (product.matches(pattern)) {
matches.add(products.get(y));
}
}