Quantcast
Channel: Forum Pasja Informatyki - Najnowsze pytania i odpowiedzi
Viewing all articles
Browse latest Browse all 83164

JAVA problem: noNullPointerException

$
0
0

JAVA informuje mnie, że metoda która chcę zainicjować jest zainicjonowana. Co ciekawe, w klasie validator jest utworzony obiekt z creditCard, a sam observator przejmuje go do konstruktora. Nie powinen się pruć o za nieinicjonowaną metodę. Przynajmniej tak ja myślę. Cóż, może ktoś odnajdzie błąd. Do oddania projektu zostały mi 3 godziny...

Zastosowane wzorce: state pattern, Observator, kompozytor.

Inicjacja błedu: Próbujesz zainicjować metodę, która jest niezainicjonowana.

Stack Track:

Exception in thread "main" java.lang.NullPointerException
    at bankonet.UserObserver.addCounter(UserObserver.java:28)
    at bankonet.Validator.isCorect(Validator.java:45)
    at bankonet.BankoNET.main(BankoNET.java:38)

Main:

    public static void main(String[] args) {
    IState creditCard = new User (0,"11",false);
    initSystem init = new initSystem (5000,false);   
         Scanner input = new Scanner(System.in);
        RunnerApps mainThread = new RunnerApps();
        UserObserver observer = new UserObserver(creditCard);
        Validator valid = new Validator(creditCard);
        
        boolean continueApps = true;
        while(continueApps)
        {
          if (observer.checkUser()){
            System.out.println("Account is Blocked!!!!!");
         
        }
        System.out.println("---Szmalcium----");
        System.out.println("We are carry your money");
        System.out.println("Please insert credic card");
        mainThread.run(2000);
        System.out.println("Please write PIN");
        String usedPassword = input.nextLine();
        System.out.println("Verify...Please wait");
        valid.isCorect(usedPassword);
        if (valid.getState())
        {
            System.out.println("Conect to bankAccount");
            init.run();
            if (init.userDecision() && init.run())
            {
                continueApps = false;
            }
        }
        System.out.println("Password is incorect");
    }

  
    }
}  

Klasa validator:

public class Validator implements IValidState{
    
    public IState creditCard;
    private UserObserver observer = new UserObserver(creditCard);
    private boolean isCorectValid = true;

    public boolean isIsCorectValid() {
        return isCorectValid;
    }

    public void setIsCorectValid(boolean isCorectValid) {
        this.isCorectValid = isCorectValid;
    }

  


    

    public Validator(IState creditCard) {
        this.creditCard = creditCard;
    }
    
    
    
    public void isCorect(String inputPIN)
    {
        String usedString = creditCard.getPassword();
        if (usedString.equals(inputPIN))
        {
           
           observer.resetCounter();
        }
   
            observer.addCounter();
            changeState(false);
    }

   

    public boolean getState() {
    return isIsCorectValid();
    }
    
    public void changeState(boolean State) {
   setIsCorectValid(State);
    }
    

Klasa userObservator

public class UserObserver {
    
    private IState creditCard;

    public UserObserver(IState creditCard) {
        this.creditCard = creditCard;
    }

   
    
    public boolean checkUser(){
    if (creditCard.getCounter() == 3){
        creditCard.changeState(false);
    }
    if (creditCard.checkState()){
        return true;
    }
    if (!creditCard.checkState()){
        return false;
    }
    return false;
    }
     public void addCounter() // A tu jest błąd.
    {
        int nowCounter = creditCard.getCounter();
        int afterCounter = nowCounter + 1;
        creditCard.setCounter(afterCounter);
    }
    public void resetCounter(){
        creditCard.setCounter(0);
    }
    
}

Miejsce błędu:

   public void addCounter() // tutaj inicjuje
    {
        int nowCounter = creditCard.getCounter();
        int afterCounter = nowCounter + 1;
        creditCard.setCounter(afterCounter);
    }
    public void resetCounter(){
        creditCard.setCounter(0);
    }

Interfejs IState

public interface IState  {
    public boolean checkState();
    public void changeState(boolean State);
    public int getCounter();
    public String getPassword();
    public void setCounter(int counter);
 
}

klasa User:

public class User implements IState {
    
    private int counter;
    private String password = "";
    private boolean isBlock;

    public String getPassword() {
        return password;
    }

    public int getCounter() {
        return counter;
    }

    public void setCounter(int counter) {
        this.counter = counter;
    }

    public boolean checkState(){
        return isBlock;
    }

    public boolean isIsBlock() {
        return isBlock;
    }

    public void setIsBlock(boolean isBlock) {
        this.isBlock = isBlock;
    }
    
    public void changeState (boolean State){
        setIsBlock(State);
    }
    
User (int counter, String password, boolean isBlock){
    
this.counter = counter;
this.password = password;
this.isBlock = isBlock;
}

    
}

 


Viewing all articles
Browse latest Browse all 83164