Search code examples
javabluej

Code won't work because of null pointer exception


I have a simple two class program in java and the main class doesont want to create an object of the nameProcessor class

I tried everything I know but I am still a dumb begginer

public class Main
{
    public static void Main()
    {
        // initialise instance variables

        String name="Andy";
        System.out.println("That name is "+name.length()+" letters long");
        System.out.println("The first letter is "+name.substring(0,1));
        nameProcessor np1 = new nameProcessor(name);
        if (np1.nameChecker()==false)
           System.out.println("That is a nice name.");
        else
            System.out.println("That is a wierd name.");
    }
}

public class nameProcessor
{
    private String userName;
    private String letters;
    private String letter;
    private boolean give;


    public nameProcessor(String name)
    {
        // initialise instance variables
        String userName=name;
        String letters="XYZWxyzw";
        String letter="";
        boolean give=false;
    }


    public boolean nameChecker()
    {
        give=false;
        for(int i=0;i<userName.length();i++){
            letter=letters.substring(i,i+1);
            if (userName.indexOf(letter)!=-1){
                give=true;
            }
        }
        return give;
    }
}

//Some correct outputs would be

//Andy->That is a nice name //XXX->that is a wierd name

//just any string containing XYZWxyzw should return true


Solution

  • You are again redefining the variables instead of assigning to the class members

     public nameProcessor(String name)
        {
            // initialise instance variables
            String userName=name; // you are resintializing the local variables 
            String letters="XYZWxyzw";
            String letter="";
            boolean give=false;
        }
    

    because of this your method nameChecker() is getting userName as null hence null pointer exception.

    This should be

    public nameProcessor(String name)
            {
                // initialise instance variables
                this.userName=name; // you are resintializing the local variables 
                this.letters="XYZWxyzw";
                ...
            }