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