2016-02-15 6 views
1

Я хочу, чтобы найти общую сумму платежа, но когда я скомпилировать и запустить код, я получаю эту ошибкуJava Наследование - найти общее количество

Exception in thread "main" java.lang.NullPointerException. 

класс оплаты

package tutorial3; 
    public class Payment { 
     private double amount; 
     public Payment() 
     { 
     this(0.0); 
     } 
     public Payment(double amount) 
     { 
     setAmount(amount); 
     } 
     public void setAmount(double amount) 
     { 
      this.amount = amount; 
     } 

     public double getAmount() 
     { 
      return amount; 
     } 

     public String toString() 
     { 
      return "amount paid is " + getAmount(); 
     } 
    } 

основной класс:

public class main { 
     public static void main(String[] args){ 
      Payment [] p = new Payment[2]; 
      Scanner sales = new Scanner (System.in); 
      double total = 0; 
      for(int i=0; i<3; i++) 
      { 
      System.out.print("Sales amount? "); 
      double amt = sales.nextInt(); 
      Payment cash = new Payment(amt); 
      }   
      for(Payment pv : p ){ 
       total += pv.getAmount(); 
      } 
     }  
    } 
+1

вы инициализировали массив, но не элементы внутри массива, поэтому вы получаете «NPE». – SomeJavaGuy

+0

Кроме того, вы никогда не _set_ сумма всех этих платежей ... –

+3

О, и вы используете конструктор на 'Payment', которого не существует. Вы пишете «Payment cash = new Payment (amt);'), но в 'Payment' нет конструктора, который принимает аргумент' double'. Этот код не компилируется. –

ответ

2

Вы забыли осел IGN созданных Payment экземпляров в массив (и, кроме того, что индексы в цикле были неправильными):

 for(int i=0; i<pv.length; i++) 
     { 
      System.out.print("Sales amount? "); 
      double amt = sales.nextDouble(); // it makes more sense to use nextDouble if 
              // you are storing the result in a double 
      pv[i] = new Payment(amt); 
     } 

BTW, я предполагаю, что ваш Payment класса имеет конструктор, который принимает double, или ваш код Wouldn» t передать компиляцию.

0

Вы создали Payment cash, но он не был отнесен к одному из элементов Payment массива объектов (Payment p[])

Заменить

Payment cash = new Payment(amt); 

с

p[i] = new Payment(amt); 

for(int i=0; i<3; i++) 
{ 
    System.out.print("Sales amount? "); 
    double amt = sales.nextDouble(); // change int to double 
    p[i] = new Payment(amt); 
}   
Смежные вопросы