2012-04-23 4 views
0

Теперь, когда я могу успешно пройти через мой цикл возможных действительных покрытий, я не могу добавить дополнительную надбавку для верхней плитки в моей программе. Я надеялся, что вы скажете мне, почему это так. Программа целиком находится внизу. Эти две части, которые касаются меня являютсяНевозможно правильно сравнить две строки

public class TestPizza 
{ 
    public static void main(String args[]) 
    { 
    int x; 
    String top[] = {"Mushrooms", "Onions", ""}; 
    Pizza one = new Pizza(); 
    Pizza two = new Pizza(); 
    Pizza three = new Pizza(); 

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

    } 
} 

И

// 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].equals(validToppings[xx])) 
     {price += 0.75;} 
    } 
    } 
} 

Я не понимаю, почему метод .equals не работает и назначая нечетную сумму изменения в конечной цене ...

// 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[] = new String[6]; 
    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 = 8; 
     price = 10.0; 
     baked = false; 
     String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"}; 
     String toppings[] = new String[3]; 
    } 

    // 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++) {System.out.println("With " + toppings[x]);}; 
     System.out.println("Price of Pie: $" + price); 
    } 

    // 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].equals(validToppings[xx])) 
      {price += 0.75;} 
     } 
     } 
    } 

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

} 
+0

Почему бы не использовать HashMap и не упростить поиск и хранение? –

ответ

0
Pizza() 
{ 
    size = 8; 
    price = 10.0; 
    baked = false; 
    String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"}; 
    String toppings[] = new String[3]; 
} 

Здесь

String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"}; 

локальна конструктору и никак не связаны с глобальными 'validToppings []'. Посмотрите на это.

4

validTopics массив экземпляров в пицце никогда не заполняется. Заменить

String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"}; 

в Pizza «s конструктор с:

this.validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"}; 

Кроме того, существует целый ряд странных вещей в вашем коде:

  • addTopping довольно неэффективен в отношении итерации по toppings
  • addTopping использует магическое число (IMO) в for петли => 3
  • инициализации массивов в Pizza дважды
  • , как вы инициализации и проверки различных начинку путает
+0

Это может быть билет. Спасибо за брата-указателя. Позвольте мне попробовать это и скомпилировать и опубликовать результаты! – user1251814

0

Ваш validToppings массив пуст. Вы сравниваете каждую строку со значением null.

Вы объявляете членов Pizza следующим образом :;

private String validToppings[] = new String[6]; 
private String toppings[] = new String[3]; 

и вы пытаетесь присвоить значение в конструкторе этот путь

String validToppings[] = {"mushrooms", "pepperonis", "onions", "mushroom", "pepperoni", "onion"}; 
String toppings[] = new String[3]; 

Но все выше код из конструктора не создает новую локальную переменную, которая будет забыл после выполнения конструктора.

Исправление состоит в том, чтобы назначить значение членам. Например, один можно правильным решением будет следующее:

  • членов Declare, как это: String[] validToppings;
  • и присвоить значение в конструкторе вроде этого: validToppings = {"mushroooms", ... };

С точки дизайна (вы можете быть новичком, но по-прежнему достойны упоминания), вы должны использовать перечисления (сохраните вас, сравнивая строки, делая опечатки, ...).

Смежные вопросы