Java-在自定义服务包中搜索ArrayList,调用UI,保持main干净
我目前正在学习Java9,已经学了一个月了,现在是我完全陷入困境的时候了。请容忍我的这一点,我还没有找到相关问题的答案,或者至少我愚蠢到没有看到我问题的答案 我正在开发一个drug shop/pharmacy console应用程序,该应用程序允许我按id、名称、数量、价格/单位添加药物,以及一个功能,该功能允许我使用.contains()搜索字符串,将找到的药物传输到新的ArrayList,然后将其输出给用户 现在的问题是:当我搜索一种药物时,它只输出ArrayList中的第一个,即使字符串存在于多个药物名称中。 如果我知道如何忽略该病例,这肯定会有所帮助,但如果我搜索“Amo”,它会输出“阿莫西林”,尽管它位于第N位 代码如下: 域-构造函数、getter、setter,用于ID、名称、数量、价格/单位 我没有包括整个域,因为WallOfUnnecessaryCode。我只是想让你知道它就在那里Java-在自定义服务包中搜索ArrayList,调用UI,保持main干净,java,search,arraylist,Java,Search,Arraylist,我目前正在学习Java9,已经学了一个月了,现在是我完全陷入困境的时候了。请容忍我的这一点,我还没有找到相关问题的答案,或者至少我愚蠢到没有看到我问题的答案 我正在开发一个drug shop/pharmacy console应用程序,该应用程序允许我按id、名称、数量、价格/单位添加药物,以及一个功能,该功能允许我使用.contains()搜索字符串,将找到的药物传输到新的ArrayList,然后将其输出给用户 现在的问题是:当我搜索一种药物时,它只输出ArrayList中的第一个,即使字符串存
package DrugDomain;
public class Drug {
private int drugID;
private String drugName;
private int drugQuantity;
private float drugPrice;
/**
* Constructor for Drug object
* @param drugName name
* @param drugQuantity quantity
* @param drugPrice price in $$$
*/
public Drug(int drugID, String drugName, int drugQuantity, float drugPrice) {
this.drugID = drugID;
this.drugName = drugName;
this.drugQuantity = drugQuantity;
this.drugPrice = drugPrice;
}
/**
* Getter for ID
* @return ID
*/
public int getDrugID() {
return drugID;
}
存储库:
package DrugRepository;
import DrugDomain.Drug;
import java.util.ArrayList;
import java.util.List;
public class DrugRepo {
private List<Drug> drugList = new ArrayList<>();
/**
* Finds a drug by IDs
* @param theID searched ID
* @return the drug or null if not present
*/
public Drug findID(int theID) {
for (Drug drug : this.drugList) {
if (drug.getDrugID() == theID) {
return drug;
}
}
return null;
}
/**
* Adds a new drug
* @param aDrug drug that will be added to list
* @return added drug or null if you try to add an ID duplicate
*/
public Drug add(Drug aDrug) {
Drug ifExists = this.findID(aDrug.getDrugID());
if (ifExists == null) {
this.drugList.add(aDrug);
return aDrug;
}
return null;
}
/**
* Getter for drug list
* @return list with all drugs
*/
public List<Drug> getAll() {
return this.drugList;
}
}
主要内容:
package com.daedalus;
import DrugRepository.DrugRepo;
import DrugService.ShopService;
import UI.StoreFrontUI;
public class Main {
public static void main(String[] args) {
DrugRepo drugRepo = new DrugRepo();
ShopService drugService = new ShopService(drugRepo);
//drugService.addDrug(ID, name, quantity, price/unit);
drugService.addDrug(1,"Paracetamol", 300, 3.95f);
drugService.addDrug(2,"Aspirin", 247, 2.95f);
drugService.addDrug(3,"Amoxicillin", 150, 12.45f);
drugService.addDrug(4,"Fentanol", 50, 15.45f);
drugService.addDrug(5,"Oxicontin", 300, 17.45f);
drugService.addDrug(6,"Robotine", 110, 11.45f);
StoreFrontUI console = new StoreFrontUI(drugService);
console.openShopMenu();
}
}
公共列表getSearchResult(字符串查询){
List alldruges=this.getAll();
列表结果=新建ArrayList();
用于(药物d:所有药物){
query=query.toLowerCase();
if(d.getDrugName().toLowerCase().contains(查询)){
结果.添加(d);
}
}
返回结果;
}
在忽略大小写的情况下在数组中搜索的解决方案。给小费的家伙们 您的
返回结果搜索方法中的code>显然放错了位置,它打破了“忽略案例”部分的循环,在包含之前转换药物名称和查询如何?(投票以键入错误结束),因此我编辑了代码,并在for循环后返回结果。我搜索“a”,它会给我ID1和ID4,扑热息痛和芬太诺。我以前也这样做过,但错过了不能给我ID2阿司匹林或ID3阿莫西林的部分。很明显,这是因为它没有忽略案例。。。我要用你说的做一点实验,然后我会带着一些结果回来。谢谢不要修改问题中的代码。如果问题已解决,请删除该问题,或将解决方案作为答案发布。
package UI;
import DrugDomain.Drug;
import DrugService.ShopService;
import java.util.Scanner;
public class StoreFrontUI {
private Scanner userInput = new Scanner(System.in);
private ShopService drugService;
public StoreFrontUI(ShopService drugServiceConsole) {
this.drugService = drugServiceConsole;
}
private void listAllDrugs() {
for (Drug drug : this.drugService.getAll()) {
System.out.println(drug);
}
}
private void addADrug() {
System.out.print("Enter drug ID: ");
int drugID = this.userInput.nextInt();
System.out.print("Enter drug name:");
String drugName = this.userInput.next();
System.out.print("Enter quantity: ");
int drugQuant = this.userInput.nextInt();
System.out.print("Enter price/unit: ");
float drugPrice = this.userInput.nextFloat();
this.drugService.addDrug(drugID, drugName, drugQuant, drugPrice);
}
private void searchDrug() {
System.out.print("Search: ");
String search = userInput.next();
System.out.println(this.drugService.getSearchResult(search));
}
private void storeFrontMenu() {
System.out.println("1. Add drug to stock.");
System.out.println("2. Search for drug.");
System.out.println("3. Sort drugs.");
System.out.println("4. Add to shopping cart.");
System.out.println("5. Checkout.");
System.out.println("6. Most expensive product in cart.");
System.out.println("s. Show all drugs.");
System.out.println("x. Exit");
System.out.println();
System.out.println("ENTER OPTION: ");
}
public void openShopMenu() {
while (true) {
this.storeFrontMenu();
String option = userInput.next();
if (option.equals("1")) {
this.addADrug();
} else if (option.equals("2")) {
this.searchDrug();
} else if (option.equals("3")) {
// TODO: 10/30/2017
} else if (option.equals("4")) {
// TODO: 10/30/2017
} else if (option.equals("5")) {
// TODO: 10/30/2017
} else if (option.equals("6")) {
// TODO: 10/30/2017
} else if (option.equals("s")) {
this.listAllDrugs();
} else if (option.equals("x")) {
break;
} else {
System.out.println("Invalid Command! Try Again!");
}
System.out.println();
}
}
}
package com.daedalus;
import DrugRepository.DrugRepo;
import DrugService.ShopService;
import UI.StoreFrontUI;
public class Main {
public static void main(String[] args) {
DrugRepo drugRepo = new DrugRepo();
ShopService drugService = new ShopService(drugRepo);
//drugService.addDrug(ID, name, quantity, price/unit);
drugService.addDrug(1,"Paracetamol", 300, 3.95f);
drugService.addDrug(2,"Aspirin", 247, 2.95f);
drugService.addDrug(3,"Amoxicillin", 150, 12.45f);
drugService.addDrug(4,"Fentanol", 50, 15.45f);
drugService.addDrug(5,"Oxicontin", 300, 17.45f);
drugService.addDrug(6,"Robotine", 110, 11.45f);
StoreFrontUI console = new StoreFrontUI(drugService);
console.openShopMenu();
}
}
public List<Drug> getSearchResult(String query) {
List<Drug> allDrugs = this.getAll();
List<Drug> result = new ArrayList<>();
for (Drug d : allDrugs) {
query = query.toLowerCase();
if (d.getDrugName().toLowerCase().contains(query)) {
result.add(d);
}
}
return result;
}