【问题标题】:Java - IF 'input' = 'this' {store string from array into variable}Java - IF 'input' = 'this' {将字符串从数组存储到变量}
【发布时间】:2012-05-15 16:17:48
【问题描述】:

我对编程比较陌生。 我现在正在尝试制作一个程序,并且我正在尝试弄清楚我该如何做某事。我希望你们能帮助我,因为我只是不知道该怎么做......

所以,首先,我制作了一个数组并用东西填充它:

String[] pizza = new String[10];
    pizza[0] = "1- Cheese";
    pizza[1] = "2- Wedge";
    pizza[2] = "3- Bacon";
    pizza[3] = "4- Hawaiian";
    pizza[4] = "5- Vegetarian";
    pizza[5] = "6- Pepperoni";
    pizza[6] = "7- Ham";
    pizza[7] = "8- Apple";
    pizza[8] = "9- Grape";
    pizza[9] = "10- Italian";

我想这样做,以便我有一个 IF 语句(在一段时间内)。我把代码放在这里,后面再解释。

int pizzaCounter = 0;

        while(pizzaCounter < 5)
        {

            Scanner pizzaPick = new Scanner(System.in);
            int Pizzas = pizzaPick.nextInt();

            if (Pizzas == 1)
            {
                *Store "1- Cheese" (From pizza[0]) into a variable*

                pizzaCounter++;
            }
            if (Pizzas == 2)
            {
                *Store "2- Wedge" (From pizza[0]) into a variable*

                pizzaCounter++;
            }
            if (Pizzas == 3) etc...

        }

现在在 'Insert something here' 位,我想尝试将其存储在数组(披萨)中的文本到某个变量中,稍后我可以打印出来.. . 例如,如果用户输入“1”,那么它需要:“1-Cheese”并将其存储在一个我可以稍后打印出来的变量中......

另外,我想让它变得干净,这样就没有 10 个 IF 语句提示每个变量的事情......?

我不知道这是否可能,但非常感谢任何帮助! :D

我希望我在这里问的是可以理解的......

如果可能,请您解释一下您在每个步骤中所做的事情,以便我能够真正理解正在发生的事情,并且以后可能会使用相同的代码,而不是仅仅复制并粘贴代码?我是个菜鸟,所以我认为我学的越多,以后可以使用的越多……非常感谢! :D

【问题讨论】:

  • 这是一个非常好的第一个问题,顺便说一句。
  • (off-topic) 遵循 Java 命名约定,变量应该是 lowercaseStartingCamelCase。不要将您的变量称为Pizzas,而是将其称为pizzas

标签: java arrays if-statement store


【解决方案1】:

您可以将整个系列的if 语句替换为:

string saveName = "";
if ((Pizzas >= 0) && (Pizzas <= 9)) {
    saveName = pizza[Pizzas];           // This is "insert something here".
    pizzaCounter++;
}

// Here, saveName has the pizza name.

对于一个允许您最多订购五个比萨饼、保存批次并在最后打印出来的完整程序,请参见下文:

import java.util.Scanner;

public class testprog {
    public static void main (String args[]) {
        String[] pizzaList = {" 0 - End of order",
            " 1 - Cheese", " 2 - Wedge", " 3 - Bacon", " 4 - Hawaiian",
            " 5 - Vegetarian", " 6 - Pepperoni", " 7 - Ham", " 8 - Apple",
            " 9 - Grape", "10 - Italian"};

        int[] orderList = new int[5];  // Ordered pizzas
        int pizzaCount = 0;            //    and count.

        Scanner pizzaPick = new Scanner(System.in);
        while (pizzaCount < 5) {
            // Output the menu.

            System.out.println ("Choose a pizza:");
            for (int i = 0; i < pizzaList.length; i++)
                System.out.println ("   " + pizzaList[i]);

            // Get input, check, and add pizza.

            int thisPizza = pizzaPick.nextInt();
            if (thisPizza == 0) break;

            if ((thisPizza > 0) && (thisPizza < pizzaList.length))
                orderList[pizzaCount++] = thisPizza;

            if ((thisPizza < 0) || (thisPizza >= pizzaList.length))
                System.out.println ("Invalid input of " + thisPizza);
        }

        // Output all pizzas.

        for (int i = 0; i < pizzaCount; i++)
            System.out.println ("Ordered: " + pizzaList[orderList[i]]);
    }
}

【讨论】:

  • 哇!!!太感谢了!!!我真的很感激这个!!! :D :D :D 我什至不知道如何感谢你!!!最后一件事,我不太了解'for'语句,否则我会自己尝试弄清楚......但我怎样才能做到这样每次我选择披萨后,我都会放一些东西比如: System.out.println("1-Large, 2-small) Scanner PizzaSize = new Scanner(System.in); int Size = PizzaSize.nextInt(); if(Size == 1) { price = price + smallPrice ; } else if(Size == 2) { price = price + largePrice
【解决方案2】:
String[] PIZZA_LABELS = new String[]{ "1- Cheese", "2- Wedge" ... }
String label;
while(pizzaCounter < 5)
{
        Scanner pizzaPick = new Scanner(System.in);
        int Pizzas = pizzaPick.nextInt();
        label  = PIZZA_LABELS[Pizzas - 1]; // 1-indexed vs 0-indexed
        ...
        System.out.println(label);

'如果'不见了。 (我鼓励您查看 java.util.Map 以获得比标签数组更简洁的数据结构)。

【讨论】:

  • ALL_CAPS 应为static final 常量保留。
  • 好吧,无论如何这应该是一个静态的最终常量:-)
【解决方案3】:

不要在 Java 中对本地原语使用大写单词 (Pizzas)。按照惯例,这些是类名。

无论Pizzas 的值如何,您都想区分相同的内容——例如,您每次递增pizzaCounter——并将其排除在if/else 之外。如果您需要做的只是获取披萨类型的名称,那么这里有一些示例说明您根本不需要一组案例,您只需要为任何后续用途分配即可。

如果每个案例有一些独特的东西,您可以使用switch

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

顺便说一句,你可以像这样初始化数组:

String eg[] = {
   "one",
   "two",
   "three",
};

【讨论】:

    【解决方案4】:

    您可以在此处执行一些操作来优化代码。首先,放弃 while 循环以支持 for 循环,如下所示:

    for (int i = 0; i < 5; i++) {
        // Will loop 5 times
    }
    

    其次,您可以将 if 语句替换为 switch 语句,如下所示:

    switch (pizzaPick.nextInt()) {
        case 0:
            // Do something
            break;
        case 1:
            // Do something else
            break;
        case 2:
            // Etc.
            break
    }
    

    但是,我们实际上可以进一步优化它,这将完全不需要 switch 语句。不过,首先,我们需要一个变量来存储挑选的比萨饼。我们可以使用另一个数组,它有 5 个元素长。像这样创建它:

    String[] pickedPizzas = new String[5];
    

    现在我们可以用它来存储挑选的比萨饼。然后我们可以在每个循环中执行此操作以保存挑选的比萨:

    pickedPizzas[i] = pizza[pizzaPick.nextInt()];
    

    如您所见,我们甚至不需要使用 if 或 switch,因为我们可以使用赋值。我们可以通过对数组使用括号语法来继续优化。您可以像这样初始化数组:

    String[] strArray = {"one", "two", "three", ...};
    

    这样可以节省空间并且更简单。最重要的是,将扫描仪的声明移到循环之外。由于循环的范围,将其放置在循环中将导致每次循环执行时重新创建和销毁它。将它放在循环之外可以解决这个问题。

    下面是最终代码的样子:

    // Hold all the pizza names
    String[] pizzas = {
        "1- Cheese",
        "2- Wedge",
        "3- Bacon",
        "4- Hawaiian",
        "5- Vegetarian",
        "6- Pepperoni",
        "7- Ham",
        "8- Apple",
        "9- Grape",
        "10- Italian"
        };
    
    // Create a variable to hold the selected pizzas
    String[] pickedPizzas = new String[5];
    
    // Create Scanner outside loop
    Scanner scanner = new Scanner(System.in);
    
    // Loop to get picked pizzas
    for (int i = 0; i < 5; i++) {
        // Save picked pizza, subtracting 1 since arrays start at 0
        pickedPizzas[i] = pizzas[scanner.nextInt() - 1];
    }
    
    // Do stuff with the users picked pizzas!
    

    【讨论】:

    • String[] pizzas = new String[] { 是多余的,你可以使用String[] pizzas = {
    • @goldilocks 够公平的。改变了。
    • 谢谢! :) 我试过了,但是,我注意到我需要在选择一个整数之后添加其他东西。比如,输入是 1,然后它提示:“标准还是大尺寸?”,我已经排序了。 . 对不起,可能应该在问题中说明...:/
    • @Vanya 如果额外操作因数字而异,您可以使用我概述的 switch 语句。如果没有,您可以简单地将其插入到 for 循环中。如果你给我一些额外的细节,我可以给你看一个例子。
    • 好的,这是我成功使用的代码,并且可以一直增加到 10,除非它看起来非常混乱。 stackoverflow.com/questions/10477824/…
    猜你喜欢
    • 2020-09-20
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多