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

时间:2017-03-27 21:25:34

标签: java

我需要我的代码在用户输入字符时打印配料

例如:'lpsh'会打印成一个数组'大披萨,菠萝,菠菜,火腿。

问题示例:'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;
        }}

3 个答案:

答案 0 :(得分:3)

可能的解决方案

要解决您的问题,请使用string.startsWith()代替string.contains()

if (order.startsWith(pizzaSize[0])) {
    /* medium */
}
else if (order.startsWith(pizzaSize[1])) {
    /* large */
}
else {
    /* unexpected input */
}

这是有效的,因为第一个字母总是表示披萨的大小。您可以坚持使用contains()作为浇头。

pizza数组

第二,你的pizza阵列发生了什么?元素01怎么样?

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

其他一些笔记

  • 使用分而治之:将您的任务拆分为逻辑部分,然后逐个处理。这将使您的生活更轻松。如果它有帮助,首先在纸上做!
  • 您不需要为循环的每次迭代创建Scanner。对于在循环开始时声明的大多数其他变量也是如此。尝试在循环之前声明那些。
  • 尝试为变量提供有意义的名称。如何理解或记住arrayTest的目的?
  • 您可能希望使用EnumHashMapcustom Topping class来改进您的代码,除非您不习惯使用这些技巧。

答案 1 :(得分:0)

备注:将此行放在验证的顶部:

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

尝试if(order.indeOf(pizza[3])) == 0让shure 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);

        }
    }
}

答案 2 :(得分:0)

如果要将订单作为其成分的单个字符表示输入,为什么不将输入视为char数组而不是字符串?

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
    }
}