2013-12-03 3 views
0

Я пытаюсь сделать телефонный тарифный калькулятор. Однако я получаю nullpointerexceptions. Не могу понять, откуда они. Помогите оценить!Телефонный тарифный калькулятор

note У меня есть другой класс, который принимает вход пользователя в список. Но то работает, как ожидалось

import java.util.ArrayList; 
    import java.util.List; 

public class TariffCalc { 

public void calculator(List<Integer> tariff){ 

    int whattariff = 0; 
    int mins = 0; 
    int texts = 0; 
    int surchargeMin = 0; 
    int surchargeText = 0; 
    int totalsurcharge= 0; 

    for(Integer s: tariff){ 
     whattariff = tariff.get(0); 
     mins = tariff.get(1); 
     texts = tariff.get(2); 
    } 

if (whattariff == 1 && mins <= 200 && texts <= 150){ 
    System.out.println("Tariff 1: Within Allowance: £20 per month: Mins used: " + mins + " Texts used: " + texts); 
} 
else if(whattariff == 1 && mins > 200){ 
    surchargeMin = mins - 200; 
    surchargeMin = (int) (surchargeMin * 0.1); 
} 

if (whattariff == 1 && texts > 150){ 
    surchargeText = texts - 150; 
    surchargeText = (int) (surchargeText * 0.05); 
} 



if (whattariff == 2 && mins <= 400 && texts <= 350){ 
    System.out.println("Tariff 2: Within Allowance: £35 per month"); 
} 
else if (whattariff == 2 && mins > 400){ 
    surchargeMin = mins - 400; 
    surchargeMin = (int) (surchargeMin * 0.1); 
} 

if (whattariff == 2 && texts > 350){ 
    surchargeText = texts - 350; 
    surchargeText = (int) (surchargeText * 0.05); 
} 

totalsurcharge = surchargeMin + surchargeText; 

if(whattariff == 1) 
System.out.println("Tariff 1: Allowance 200mins + 150 text. Used: " + mins + " + " + texts + ": Total Cost is £" + (20 + totalsurcharge)); 
else if (whattariff == 2){ 
    System.out.println("Tariff 2: Allowance 400mins + 350 text. Used: " + mins + " + " + texts + ": Total Cost is £" + (35 + totalsurcharge)); 
} 

} 
public static void main(String[] args) { 


    TariffCalc c = new TariffCalc(); 
    c.calculator(null); 

} 

} 

ответ

3

Вашего пропускание null объекта в этой строке:

c.calculator(null); 

и ваши попыток перебирать в этой строке

for(Integer s: tariff) 

который делает ваш код, чтобы бросить исключение.

Вы должны сделать что-то вроде этого:

List<Integer> tariffs = new ArrayList<Integer>(); 
tariffs.add(1); 
tariffs.add(2); 
tariffs.add(3); 
c.calculator(tariffs); 

, который дает мне выход:

Tariff 1: Within Allowance: £20 per month: Mins used: 2 Texts used: 3 
Tariff 1: Allowance 200mins + 150 text. Used: 2 + 3: Total Cost is £20 
0

Вы передаете null к методу calculator() и пытается перебрать его в этом методе ,

c.calculator(null); // passing null 
.... 
public void calculator(List<Integer> tariff) { // tariff is null as you passed null from main method 
... 
for (Integer s : tariff) { // Trying to iterator over null, hence, NPE 
    whattariff = tariff.get(0); 
    mins = tariff.get(1); 
    texts = tariff.get(2); 
} 

Возможно, вам необходимо отправить список целых чисел в метод расчета. Что-то вроде этого

// In main method 
List<Integer> tariff = new ArrayList<>(); // new integer list for example 
tariff.add(1); // add 1 
tariff.add(2); // add 2 
c.calculator(tariff); // pass the list to calculate method 
Смежные вопросы