0

私のプログラム全体は以下のとおりです。

私が抱えている問題は、この特定のコード行によって生成されたエラー メッセージによって stdout があふれてしまうことです。

  for(int x = 0; x < 3; x++)
  {
    for(int xx = 0; xx < 6; xx++)
    {
      if(toppings[x].equalsIgnoreCase(validToppings[xx]))
      {price += 0.75;} else {System.out.println("Error in Pizza class: Attempt to set invalid pizza topping " + toppings[x]);};
    }
  }

完成に多くの時間を費やしたコードを書き直すつもりはありませんが、簡潔なエラー メッセージを表示するために switch ステートメントなどを使用する必要がある場合は、書き直します。私の現在の方法が最善だと思いますが。

以下は、クラスのテストです。

public class TestPizza
{
  public static void main(String args[])
  {
    int x;
    String t1[] = {"Mushrooms", "Onions", ""};
    String t2[] = {"Pepperoni", "Mushrooms", ""};
    String t3[] = {"Pepperoni", "Mushrooms", "Onions"};
    String t4[] = {"Sausage", "", ""};
    Pizza one = new Pizza();
    Pizza two = new Pizza();
    Pizza three = new Pizza();
    Pizza four = new Pizza();

one.setSize(12);
one.addTopping(t1);
one.showValues();

two.setSize(8);
two.addTopping(t2);
two.showValues();

three.setSize(16);
three.addTopping(t3);
three.showValues();

four.setSize(20);
four.addTopping(t4);
four.showValues();

  }
}

これがクラスです。

// This custom class is used to create Pie objects
// It stores the data about the Pie in four variables:
// size, price, type and baked
// It lets the program that creates the Pie object set these values using four methods:
// setSize, setPrice, setType and bake

public class Pizza
{

  // Declare four variables that can store the values for each pie
  // Each Pie object will have their own, separate copy of these variables 12.
    private int size;
    private double price;
    private boolean baked;
    private int x;
    private int xx;
    private String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"};
    private String toppings[] = new String[3];


    // The "constructor" method is called when a new pie
    // object is first created. We use it to set "default" values.
    // Our typical pie is 10 inches, costs $8 and is not baked yet
    // We don't yet know what the pie filling will be
    Pizza()
    {
      size = 999;
      price = 999;
      baked = false;
    }

    // showValues() is a void method that displays the values of the
    // current Pie
    public void showValues()
    {
      System.out.println("Pie Size: " + size);
      for(int x = 0; x < 3; x++) {if(toppings[x] != ("")) {System.out.println("With " + toppings[x]);}};
      System.out.println("Price of Pie: $" + price + "\n\n");
    }

    // getSize() returns the size of the pie
    public int getSize()
    {
      return size;
    }
    // getPrice() returns the price of the pie
    public double getPrice()
    {
      return price;
    }
    // baked() returns whether or not the pie is baked
    public boolean getBaked()
    {
      return baked;
    }
    // setSize() assigns a size to the pie
    public void setSize(int thisSize)
    {
      size = thisSize;
      switch(size)
      {
        case 8: price = 10.00; break;
        case 12: price = 14.00; break;
        case 16: price = 18.00; break;
        default: System.out.println("Error in Pizza class: Attempt to set invalid Pizza size."); break;
      }
    }

    // setPrice() assigns a price to the pie
    public void addTopping(String programToppings[])
    {
      for(int x = 0; x < 3; x++)
      {
        toppings[x] = programToppings[x];
      }
      for(int x = 0; x < 3; x++)
      {
        toppings[x] = toppings[x].toLowerCase();
      }
      for(int x = 0; x < 3; x++)
      {
        for(int xx = 0; xx < 6; xx++)
        {
          if(toppings[x].equalsIgnoreCase(validToppings[xx]))
          {price += 0.75;} else {System.out.println("Error in Pizza class: Attempt to set invalid pizza topping " + toppings[x]);};
        }
      }
    }

  public void bake()
  {
    baked = true;
  };

}
4

3 に答える 3

1

You should use a boolean variable isValid, which is initially set to false. As soon as you find a match, set it to true. After all the iterations are complete, ifisValid is still false, then print the error message.

于 2012-04-23T07:55:33.313 に答える
0

エラーが発生した場合、ループを続けたくない場合があります。また、有効なトッピングには Set を使用します。

// set globally.
Set<String> validTopppingSet = new HashSet<String>();
for(String t: validToppings) validToppingSet.add(t.toLowerCase());

// when checking the toppings.
for(String topping: topping) {
    if (validToppings.contains(topping.toLowerCase())) {
        price += 0.75;
    } else {
        price = Double.NaN;
        System.out.println("Error in Pizza class: Attempt to set invalid pizza topping: " + topping); // it useful to know what was invalid.
        break;
    }
}
于 2012-04-23T08:04:20.047 に答える
0
  boolean error = false;
  for(int x = 0; x < 3; x++)
  {
    for(int xx = 0; xx < 6; xx++)
    {
      if(toppings[x].equalsIgnoreCase(validToppings[xx]))
      {price += 0.75;} else {error = true;};
    }
  }
  if(error){
    System.out.println("Error in Pizza class: Attempt to set invalid pizza topping");
  }

トッピング情報も保持したい場合は、各トッピングをリストに保存し (エラーが true に設定されるたびに追加するだけです)、if(error) ステートメントでそのリストを反復処理する必要があります。

于 2012-04-23T07:57:11.850 に答える