2

私はプログラミングに比較的慣れていません。私は今、プログラムを作ろうとしています。そして、どうすれば何かができるのかを理解しようとしています。私はこれを行う方法がわからないので、皆さんが私を助けてくれることを願っています...

それで、まず最初に、私は配列を作成し、それをもので埋めました:

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

        }

ここで、「ここに何かを挿入」ビットで、配列(ピザ)からのテキストを後で印刷できる変数に格納するようにしようと思います...たとえば、ユーザーが「1」と入力した場合'次に、「1-Cheese」を取り、後で出力できる変数に格納します。

また、各変数にプロンプ​​トを表示するIFステートメントが10個ないように、クリーンにしたいのですが...?

これが可能かどうかはわかりませんが、どんな助けでも大歓迎です!:D

私がここで求めていることが理解できることを願っています...

可能であれば、各ステップで何をしているのか説明してください。そうすれば、実際に何が起こっているのかを理解でき、後で同じコードをコピーして貼り付けるのではなく、使用することができますか?私は一種の初心者なので、学べば学ぶほど、後で使えるようになると思います...どうもありがとうございました!:D

4

4 に答える 4

4

if一連のステートメント全体を次のようなものに置き換えることができます。

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

// Here, saveName has the pizza name.

最大5つのピザを注文し、ロットを節約して最後に印刷できる本格的なプログラムについては、以下を参照してください。

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]]);
    }
}
于 2012-05-07T05:58:43.490 に答える
0
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);

「if」がなくなった。(ラベル配列よりもクリーンなデータ構造については、java.util.Mapを確認することをお勧めします)。

于 2012-05-07T06:02:49.153 に答える
0

PizzasJavaのローカルプリミティブに大文字の単語()を使用しないでください。従来、これらはクラス名です。

の値に関係なく、同じものを区別する必要がありPizzasます。たとえば、毎回インクリメントpizzaCounterし、if/elsesから除外します。ピザの種類の名前を取得するだけでよい場合は、一連のケースをまったく必要としない方法の例をいくつか示します。その後の使用に割り当てる必要があります。

ケースごとにいくつかのユニークなものがある場合は、switch:を使用できます。

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

ところで、次のように配列を初期化できます。

String eg[] = {
   "one",
   "two",
   "three",
};
于 2012-05-07T06:07:48.843 に答える
0

コードを最適化するためにここでできることがいくつかあります。まず、次のように、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やスイッチを使用する必要はありませんでした。配列にブラケット構文を使用して、最適化を続行できます。次のように配列を初期化できます。

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!
于 2012-05-07T06:09:03.460 に答える