Java:使用.contains,但返回两个值

Java:使用.contains,但返回两个值,java,Java,当用户输入字符时,我需要我的代码来打印页眉 例如:“lpsh”将打印成一个数组“大比萨饼、菠萝、菠菜、火腿” 问题示例:“m”将同时打印中份比萨饼和马苏里拉干酪 如果只输入了一个'm',我需要它只打印两个'm'中的一个,如果输入了两个'm',我需要它同时打印两个'm',我是Java的初学者,任何帮助都将不胜感激,非常感谢。未完成的代码: String[] pizza = new String[7]; pizza[2] = "h"; pizza[3] = "m";

当用户输入字符时,我需要我的代码来打印页眉

例如:“lpsh”将打印成一个数组“大比萨饼、菠萝、菠菜、火腿”

问题示例:“m”将同时打印中份比萨饼和马苏里拉干酪

如果只输入了一个'm',我需要它只打印两个'm'中的一个,如果输入了两个'm',我需要它同时打印两个'm',我是Java的初学者,任何帮助都将不胜感激,非常感谢。未完成的代码:

    String[] pizza = new String[7];
    pizza[2] = "h";
    pizza[3] = "m";
    pizza[4] = "o";
    pizza[5] = "p";
    pizza[6] = "s";

    String[] pizzaSize = new String[2];
    pizzaSize[0] = "m";
    pizzaSize[1] = "l";


    while (true) {
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter a Pizza Order: ");                                //Request user input and declares order
        String order = input.nextLine();
        List<String> arrayTest = new ArrayList<String>();

        if (order.contains(pizzaSize[0])) {
            multiplier = 1;
            pizzaPrice += 4;
            arrayTest.add("Medium Pizza");
            arrayTest.remove("Large Pizza");
        }
        if (order.contains(pizza[3])) {
            arrayTest.add("Mozzarella");
            pizzaPrice += 1.00 * multiplier;
        }}

备注:将此行置于验证的顶部:

if (order.equals("quit")) {
    break;
}
尝试iforder.indeOfpizza[3]==0以获取舒尔m位于第一个位置,或尝试使用正则表达式验证输入:

public static void main(String[] args) throws IOException {


    String[] pizza = new String[7];
    pizza[2] = "h";
    pizza[3] = "m";
    pizza[4] = "o";
    pizza[5] = "p";
    pizza[6] = "s";

    while (true) {
        Scanner input = new Scanner(System.in);
        String order = input.nextLine();
        int pizzaPrice = 0;
        double multiplier = 0;
        System.out.println(pizzaPrice);
        List<String> arrayTest = new ArrayList<>();

        if (order.equals("quit")) {
            break;
        }


        Pattern compile = Pattern.compile("(?<size>[m|l])(?<toppings>[hmops]*)");
        Matcher matcher = compile.matcher(order);
        if (matcher.find()) {
            String size = matcher.group("size");
            switch (size) {
                case "m":
                    multiplier = 1;
                    pizzaPrice += 4;
                    arrayTest.add("Medium Pizza");
                    arrayTest.remove("Large Pizza");
                    break;
                case "l":
                    arrayTest.add("Large Pizza");
                    arrayTest.remove("Medium Pizza");//add to string instead so printed in format
                    multiplier = 1.5;
                    pizzaPrice += 5;
                    break;
                default:
                    //TODO unknown pizza
                    break;
            }

            String toppings = matcher.group("topping");
            if (toppings.contains(pizza[2])) {
                arrayTest.add("Ham");
                pizzaPrice += 1.40 * multiplier;
            }
            if (toppings.contains(pizza[3])) {
                arrayTest.add("Mozzarella");
                pizzaPrice += (1.00 * multiplier);
            }
            if (toppings.contains(pizza[4])) {
                arrayTest.add("Olives");
            }
            if (toppings.contains(pizza[5])) {
                arrayTest.add("Pineapple");
            }
            if (toppings.contains(pizza[6])) {
                arrayTest.add("Spinach");
                // integer = integer + price of Spinach
            }
            System.out.println(pizzaPrice);
            System.out.println(arrayTest);

        }
    }
}
可能的解决办法 为了解决您的问题,请使用而不是字符串。包含:

这是因为第一个字母总是表示比萨饼的大小。您可以坚持使用包含的浇头

比萨饼阵列 第二,你的比萨饼阵列是怎么回事?元素0和1呢

其他一些注释 使用分而治之:将你的任务分成逻辑部分,然后分别处理。这会让你的生活更轻松。如果有用的话,先在纸上写! 您不需要为循环的每次迭代都创建一个扫描程序。循环开始时声明的大多数其他变量也是如此。尝试在循环之前声明这些。 尽量给变量起一个有意义的名字。人们应该如何理解或记住arrayTest的目的? 您可能希望通过使用或来改进代码,除非您对使用这些技术感到不舒服。
如果要将顺序作为其成分的单字符表示输入,为什么不将输入作为字符数组而不是字符串处理呢

char[] charArray = new char[100];
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
int actualBuffered = buffer.read(charArray,0,100);
然后你可以分析第一个元素的大小,其余元素的成分

if(charArray[0] == 'l'))
    //set size large
else if...

for(int i=1; i<charArray.length; i++)
{
    if(charArray[i] == 'm')
    {
        //moz option added
    }
}

信的位置应该决定它的翻译方式吗?例如,第一个位置的m总是中等,而任何其他位置的m总是莫扎里拉吗?因为“m”看起来像是在做多个活动大小+奶酪,因为你的位置决定了大小,为什么你需要奶酪活动处理订单=“m”是的,你是对的!第一个字符代表比萨的大小l或m,其余的是配料
char[] charArray = new char[100];
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
int actualBuffered = buffer.read(charArray,0,100);
if(charArray[0] == 'l'))
    //set size large
else if...

for(int i=1; i<charArray.length; i++)
{
    if(charArray[i] == 'm')
    {
        //moz option added
    }
}