Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-在自定义服务包中搜索ArrayList,调用UI,保持main干净_Java_Search_Arraylist - Fatal编程技术网

Java-在自定义服务包中搜索ArrayList,调用UI,保持main干净

Java-在自定义服务包中搜索ArrayList,调用UI,保持main干净,java,search,arraylist,Java,Search,Arraylist,我目前正在学习Java9,已经学了一个月了,现在是我完全陷入困境的时候了。请容忍我的这一点,我还没有找到相关问题的答案,或者至少我愚蠢到没有看到我问题的答案 我正在开发一个drug shop/pharmacy console应用程序,该应用程序允许我按id、名称、数量、价格/单位添加药物,以及一个功能,该功能允许我使用.contains()搜索字符串,将找到的药物传输到新的ArrayList,然后将其输出给用户 现在的问题是:当我搜索一种药物时,它只输出ArrayList中的第一个,即使字符串存

我目前正在学习Java9,已经学了一个月了,现在是我完全陷入困境的时候了。请容忍我的这一点,我还没有找到相关问题的答案,或者至少我愚蠢到没有看到我问题的答案

我正在开发一个drug shop/pharmacy console应用程序,该应用程序允许我按id、名称、数量、价格/单位添加药物,以及一个功能,该功能允许我使用.contains()搜索字符串,将找到的药物传输到新的ArrayList,然后将其输出给用户

现在的问题是:当我搜索一种药物时,它只输出ArrayList中的第一个,即使字符串存在于多个药物名称中。 如果我知道如何忽略该病例,这肯定会有所帮助,但如果我搜索“Amo”,它会输出“阿莫西林”,尽管它位于第N位

代码如下: 域-构造函数、getter、setter,用于ID、名称、数量、价格/单位 我没有包括整个域,因为WallOfUnnecessaryCode。我只是想让你知道它就在那里

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); } } 返回结果; }
在忽略大小写的情况下在数组中搜索的解决方案。给小费的家伙们

您的
返回结果显然放错了位置,它打破了“忽略案例”部分的循环,在
包含
之前转换药物名称和查询如何?(投票以键入错误结束),因此我编辑了代码,并在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;
}