我需要我的代码在用户输入字符时打印配料
例如:'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;
}}
答案 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
阵列发生了什么?元素0
和1
怎么样?
String[] pizza = new String[7];
pizza[2] = "h";
pizza[3] = "m";
pizza[4] = "o";
pizza[5] = "p";
pizza[6] = "s";
Scanner
。对于在循环开始时声明的大多数其他变量也是如此。尝试在循环之前声明那些。arrayTest
的目的?Enum
,HashMap
或custom 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
}
}