2015-02-23 7 views
-2

Мы только начинаем узнавать о массивах в моем курсе Java, поэтому у меня возникают проблемы. Я хочу умножить «количество» на «стоимость», чтобы распечатать общую стоимость, но прямо сейчас она выводит 0 для totalCost. Вот водитель:Как добавить два значения в массив?

import java.util.Scanner; 

public class Problem2 { 

public static void main(String[] args){ 

String purchase, date; 
double quantity, cost; 

Scanner myScanner = new Scanner (System.in); 

    System.out.println("How many different types of items are you purchasing?"); 
    int answer = myScanner.nextInt(); 
    myScanner.nextLine(); // pick up the enter key 

    Basket[] myBasket = new Basket[answer]; 
    for(int j = 0; j < answer; j++) { 

     System.out.println("Please enter the item you purchased."); 
     purchase = myScanner.nextLine(); 

     System.out.println("Please enter the date."); 
     date = myScanner.nextLine(); 

     System.out.println("Please enter the quantity."); 
     quantity = myScanner.nextFloat(); 

     System.out.println("Please enter the cost."); 
     cost = myScanner.nextFloat(); 
     myScanner.nextLine(); // pick up the enter key 

     myBasket[j] = new Basket(purchase, date, quantity, cost); 
    } 

    for (int i = 0; i< answer; i++) 
    { 
     System.out.println(myBasket[i]); 
    } 
} 
} 

Вот класс Basket:

import java.text.NumberFormat; 

public class Basket { 

    private String purchase, date; 
    private double quantity, cost, totalCost; 

    NumberFormat fmt = NumberFormat.getCurrencyInstance(); 

    public Basket(String purchase, String date, double quantity, double cost) 
    { 
     this.purchase = purchase; 
     this.date = date; 
     this.quantity = quantity; 
     this.cost = cost; 
    } 

    public void Calculations() 
    { 
     totalCost = cost * quantity; 
    } 

    public String toString() 
    { 
     return "Purchase: " + purchase 
     + "\nDate: " + date 
     +"\nQuantity: " + quantity 
     +"\nCost:" + fmt.format(totalCost); 
    } 
} 
+0

На различной ноте, это не отличная идея есть отдельный метод, который вы должны вызвать, чтобы получить правильное внутреннее состояние. Вероятно, лучше вообще не делать 'totalCost' полем, но если вам нужно, вы должны называть' расчеты' (имена методов начинаются с строчного) от конструктора и любых сеттеров. – chrylis

+4

Когда вы называете 'Расчеты'? Мне бы лучше иметь метод «getTotalCost» и возвращать результат вычисления, а не назначать ему значение поля – MadProgrammer

+0

И в чем ваш вопрос? – Jens

ответ

0

Добавить Calculations(); в toString()

public String toString() 
{ 
    Calculations(); 
    return "Purchase: " + purchase 
    + "\nDate: " + date 
    +"\nQuantity: " + quantity 
    +"\nCost:" + fmt.format(totalCost); 
} 

ИЛИ, так как метод вычисления является публичной вы можете вызвать его из основной метод с myBasket[j].Calculations();

af тер

myBasket[j] = new Basket(purchase, date, quantity, cost);

0

Если вы хотите TotalCost быть заполнены, вы можете вызвать метод Вычисления, когда вы создаете экземпляр Корзин, как:

myBasket[j] = new Basket(purchase, date, quantity, cost); 
myBasket[j].Calculations(); 

Это теперь рассчитать общую стоимость и сохранить его в переменной состояния, которую вы можете напечатать позже.

0

После последней строки в основной(), добавьте код ниже,

float total=0.0; 
for (int i = 0; i< answer; i++) 
{ 
    //System.out.println(myBasket[i]); 
     total+=myBasket[2]*myBasket[3]; 
} 
System.out.println("total cost:"+total); 
0

Ваш метод «Расчеты» это не вызывается. Я хотел бы вызвать его в последней строке конструктора.

Кстати - ява конвенция нижний регистр в начале имени метода, и это лучше назвать его тем, что он делает - «calculateTotalCost», например

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

  • Нет связанных вопросов^_^