2015-09-29 2 views
0

Я новичок в программировании на Java. Я разработал класс Pizza, который принимает параметры и выводит описание и стоимость. Я разработал класс PizzaOrderArray, в котором хранятся порядки пиццы в массиве. У меня есть класс, содержащий основной метод.Значения Java toString() не печатаются

Когда я попытался напечатать значения заказов, ничто не распечатывает отладки, показывает, что были введены правильные методы и циклы.

Что я делаю неправильно? Я потратил много часов и все еще очень смущен. Любые предложения, пожалуйста? Спасибо! Я ценю это.

Pizza.java

import java.text.NumberFormat; 
import java.util.Locale; 

public class Pizza { 

    public Pizza(String size, int numCheeseTop, int numPepTop, int numHamTop) { 
     if (!setPizzaSize(size)) { 
      System.out.println(size + " is invalid size." + "Use small, medium or large."); 
     } 
     setNumCheese(numCheeseTop); 
     setNumPep(numPepTop); 
     setNumHam(numHamTop); 
    } 

    public Pizza(String size, int numPepTop, int numHamTop) { 
     if (!setPizzaSize(size)) { 
      System.out.println(size + " is invalid size." + "Use small, medium or large."); 
     } 
     pizza_cheese = 0; 
     setNumPep(numPepTop); 
     setNumHam(numHamTop); 
    } 

    public Pizza(String size, int numHamTop) { 
     if (!setPizzaSize(size)) { 
      System.out.println(size + " is invalid size." + "Use small, medium or large."); 
     } 
     pizza_pep = 0; 
     setNumHam(numHamTop); 
     pizza_cheese = 0; 
    } 

    public Pizza(String size) { 
     if (!setPizzaSize(size)) { 
      System.out.println(size + " is invalid size." + "Use small, medium or large."); 
     } 
     pizza_cheese = 0; 
     pizza_pep = 0; 
     pizza_ham = 0; 
    } 

    public Pizza() { 
     pizza_size = "small"; 
     pizza_cheese = 0; 
     pizza_pep = 0; 
     pizza_ham = 0; 
    } 

    public Pizza(Pizza copyPizza) { 
     pizza_size = copyPizza.getPizzaSize(); 
     pizza_cheese = copyPizza.getNumCheese(); 
     pizza_pep = copyPizza.getNumPep(); 
     pizza_ham = copyPizza.getNumHam(); 
    } 

    //Setters 
    public boolean setPizzaSize(String size) { 
     if (size.equalsIgnoreCase("small") || (size.equalsIgnoreCase("medium") || (size.equalsIgnoreCase("large")))) { 
      pizza_size = size.toLowerCase(); 
      return true; 
     } 
     return false; 
    } 

    public void setNumCheese(int numCheeseTop) { 
     pizza_cheese = numCheeseTop; 
    } 

    public void setNumPep(int numPepTop) { 
     pizza_pep = numPepTop; 
    } 

    public void setNumHam(int numHamTop) { 
     pizza_ham = numHamTop; 
    } 
    //End of setters 

    //Getters 
    public String getPizzaSize() { 
     return pizza_size; 
    } 

    public int getNumCheese() { 
     return pizza_cheese; 
    } 

    public int getNumPep() { 
     return pizza_pep; 
    } 

    public int getNumHam() { 
     return pizza_ham; 
    } 

    //End of getters 
    public double calcCost() { 
     if (pizza_size.toLowerCase() == "small") { 
      return 10 + ((pizza_cheese + pizza_pep + pizza_ham) * 2); 
     } 
     if (pizza_size.toLowerCase() == "medium") { 
      return 12 + ((pizza_cheese + pizza_pep + pizza_ham) * 2); 
     } 
     if (pizza_size.toLowerCase() == "large") { 
      return 14 + ((pizza_cheese + pizza_pep + pizza_ham) * 2); 
     } 
     if (pizza_size.toLowerCase() != "small" && pizza_size.toLowerCase() != "medium" 
       && pizza_size.toLowerCase() != "large") { 
      System.out.println("Invalid pizza size"); 
      return 0; 
     } 
     return 0; 
    } 

    public String getDescription() { 
     return pizza_size + " pizza with " + pizza_cheese + " cheese toppings " + pizza_pep + " pepperoni toppings and " 
       + pizza_ham + " ham toppings "; //+ " which is " + money.format(pizza2.calcCost()); 
    } 

    //private String pizza_size; 
    //private int pizza_cheese, pizza_pep, pizza_ham; 
    public String pizza_size; 
    public int pizza_cheese, pizza_pep, pizza_ham; 

} //End of Pizza class 

PizzaOrderArray.java

import static java.lang.System.out; 

public class PizzaOrderArray { 

    public String pizza_size; 
    public int pizza_cheese, pizza_pep, pizza_ham; 

    //private String pizza_size; 
    //private int pizza_cheese; pizza_pep; pizza_ham; 
    private Pizza[] pizza; 
    private int index = 0; 

    public PizzaOrderArray() { 
     System.out.println("PizzaOrderArray()"); 
     index = 1; 
     pizza = new Pizza[index]; 
    } 

    public PizzaOrderArray(int i) { 
     System.out.println("PizzaOrderArray(int i)"); 
     index = 1; 
     pizza = new Pizza[index]; 
    } 

    public PizzaOrderArray(PizzaOrderArray poa) { 
     System.out.println("PizzaOrderArray(PizzaOrderArray poa)"); 
     pizza = new Pizza[poa.index]; 
     index = poa.index; 
     for (int i = 0; i < poa.index; i++) { 
      System.out.println("PizzaOrderArray(PizzaOrderArray poa) for loop"); 
      pizza[i] = new Pizza(poa.pizza[i]); 
     } 
    } 

    public void setPizza(int index1, Pizza newpizza) { 
     System.out.println("Inside of setPizza"); 
     pizza[index1] = new Pizza(newpizza); 
    } 

    public String getPizzaSize() { 
     System.out.println("Inside of getPizzaSize"); 
     return pizza_size; 
    } 

    public int getNumCheese() { 
     System.out.println("Inside of getNumCheese"); 
     return pizza_cheese; 
    } 

    public int getNumPep() { 
     System.out.println("Inside of getNumPep"); 
     return pizza_pep; 
    } 

    public int getNumHam() { 
     System.out.println("Inside of getNumHam"); 
     return pizza_ham; 
    } 

    public String toString() { 
     String s = ""; 
     int indexUsed = 0; 
     System.out.println("Inside of toString"); 
     for (int i = 0; i < indexUsed; i++) { 
      s = (s + pizza[i].toString()); 
     } 
     System.out.println("Inside of toString for loop"); 

     return s; 
    } 

    public double calcTotal() { 
     double r = 0.0; 
     System.out.println("Inside of calcTotal"); 

     for (int i = 0; i < index; i++) { 
      System.out.println("Inside of calcTotal for loop"); 
      r = r + pizza[i].calcCost(); 
     } 
     return r; 
    } 

    public boolean equals(PizzaOrderArray orderarray) { 
     boolean r = false; 
     System.out.println("Inside of equals"); 
     if (orderarray.pizza.length != pizza.length) { 
      System.out.println("Inside of equals if"); 
      return r; 
     } 

     for (int i = 0; i < orderarray.pizza.length; i++) { 
      if (pizza[i].equals(orderarray.pizza[i])) { 
       System.out.println("Inside of equals for-if"); 
       r = true; 
      } else { 
       System.out.println("Inside of equals for-else"); 
       return false; 
      } 
     } 
     System.out.println("Return of equals"); 
     return r; 
    } 

} //End of PizzaOrderArray class 

V4_Project_15_page_418.java

import java.text.DecimalFormat; 
import java.util.Scanner; 
import java.util.Arrays; 

public class V4_Project_15_page_418 { 

    public static void main(String args[]) { 
     //Order1 
     PizzaOrderArray order1 = new PizzaOrderArray(); 
     Pizza pizzaone = new Pizza("Medium", 0, 0, 0); 
     Pizza pizzatwo = new Pizza("Small", 1, 0, 0); 
     order1.setPizza(0, pizzaone); 
     System.out.println("Order 1: "); 
     System.out.println(order1.toString()); 
     System.out.println(order1); 
     System.out.println(); 

     //Order2 
     Pizza pizzathree = new Pizza(pizzatwo); 
     PizzaOrderArray order2 = new PizzaOrderArray(2); 
     order2.setPizza(0, pizzaone); 
     order2.setPizza(0, pizzatwo); 
     System.out.println("Order 2: "); 
     System.out.println(order2.toString()); 
     System.out.println(order2); 
     System.out.println(); 

     //Order3 
     PizzaOrderArray order3 = new PizzaOrderArray(1); 
     order3.setPizza(0, pizzaone); 
     order3.setPizza(0, pizzatwo); 
     System.out.println("Order 3: "); 
     System.out.println(order3.toString()); 
     System.out.println(order3); 
     System.out.println(); 

     //Order4 
     PizzaOrderArray order4 = new PizzaOrderArray(order3); 
     System.out.println("Order 4: "); 
     System.out.println(order4.toString()); 
     System.out.println(order4); 
     //TEST THE PROGRAM 
     System.out.println("TEST: The total for order 4 is: " + order4.calcTotal()); 
     System.out.println(); 

     //Order5 
     PizzaOrderArray order5 = new PizzaOrderArray(order1); 
     System.out.println("Order5: "); 
     System.out.println(order5); 
     System.out.println(); 

    }//End of main class 

}//End of V4_Project_15_page_418 class 

Выход:

PizzaOrderArray() 
Inside of setPizza 
Order 1: 
Inside of toString 
Inside of toString for loop 

Inside of toString 
Inside of toString for loop 


PizzaOrderArray(int i) 
Inside of setPizza 
Inside of setPizza 
Order 2: 
Inside of toString 
Inside of toString for loop 

Inside of toString 
Inside of toString for loop 


PizzaOrderArray(int i) 
Inside of setPizza 
Inside of setPizza 
Order 3: 
Inside of toString 
Inside of toString for loop 

Inside of toString 
Inside of toString for loop 


PizzaOrderArray(PizzaOrderArray poa) 
PizzaOrderArray(PizzaOrderArray poa) for loop 
Order 4: 
Inside of toString 
Inside of toString for loop 

Inside of toString 
Inside of toString for loop 

Inside of calcTotal 
Inside of calcTotal for loop 
Invalid pizza size 
TEST: The total for order 4 is: 0.0 

PizzaOrderArray(PizzaOrderArray poa) 
PizzaOrderArray(PizzaOrderArray poa) for loop 
Order5: 
Inside of toString 
Inside of toString for loop 
+0

'если (pizza_size.toLowerCase() == "малый")' -> [? Как сравнить строки в Java] (HTTP: //stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) – Pshemo

+0

Но вы понимаете разницу между методом '==' и 'equals'? – Pshemo

ответ

3

Всмотритесь в состоянии в этом для цикла, это ISN никогда не будет печатать ничего, поскольку условие никогда не выполняется, поскольку i не меньше indexUsed, которое равно 0.

public String toString() { 
    String s = ""; 
    int indexUsed = 0; 
    System.out.println("Inside of toString"); 
    for(int i = 0; i < indexUsed; i++) 
     s= (s + pizza[i].toString()); 
     System.out.println("Inside of toString for loop"); 

    return s; 
} 
+0

Хм ... К сожалению, есть еще одна ошибка в этом фрагменте кода. Вы это заметили? – Seelenvirtuose

+0

Да! Вау, спасибо, дорогой сэр. Теперь я печатаю значения, но значения находятся в форме шестнадцатеричного вида: Pizza @ 437d51a6. Как я могу получить значения для более нормальной строки? Кроме того, размер пиццы в порядке4 недействителен, что мне нужно будет изучить. Но, опять же, как я могу получить значения в более нормальную строку? Еще раз спасибо. –

+0

@Justin Если вы хотите спросить о другой проблеме, отправьте другой вопрос. – Pshemo

0

Сниппет

int indexUsed = 0; System.out.println("Inside of toString"); for(int i = 0; i < indexUsed; i++) s= (s + pizza[i].toString()); неправильно, ваш цикл никогда не выполняется, так как indexUsed 0

+0

Объекты всегда имеют метод 'toString()'. Он унаследован от класса Object или другого более близкого супертипа. Наш класс может просто переопределить его. – Pshemo

+0

, если нет toString(), он будет использовать по умолчанию toString(), который обычно печатает адрес памяти объекта. Вы всегда получите что-то напечатанное – dkatzel

+0

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

1

Что-то также необходимо обратить внимание на:

for(int i = 0; i < indexUsed; i++) 
    s= (s + pizza[i].toString()); 
    System.out.println("Inside of toString for loop"); 

означает:

for(int i = 0; i < indexUsed; i++) { 
    s= (s + pizza[i].toString()); 
} 
    System.out.println("Inside of toString for loop"); 

Так что это System.out.println просто вводит в заблуждение, вы никогда не "внутри" для цикла.

Я думаю, что лучше всегда использовать фигурные скобки '{}' для цикла/while.

0

В вашем методе ToString, то для условия цикла никогда не становится истинным (перед самой первой итерации, 0 < 0 становится ложным & цикл завершается без выполнения один раз), поэтому цикл никогда не выполняет.

Вы можете попробовать изменить для оператора цикла к:

for(int i = 0; i < index; i++)