简体   繁体   中英

char array to int array conversion in java generates null pointer exception

I am trying to run the following HillCipher program but it is terminated after the line of conversion of char array to int array and after compilation of that code it shows me null pointer exception.It works fine if I replace int array with int variable,but I need int array in this code to encrypt the data:

        try{
            do//key
            {
                System.out.println("Enter Key of length 4 character : ");
                sKey=(new BufferedReader(new InputStreamReader(System.in))).readLine();
                cKey=new char[2][2];
            }while(!checkKey());
        }
        catch(Exception e)
        {}
    }
    boolean checkKey()
   {
       boolean flag=true;
       if(sKey.length()!=4)
            flag=false;
        int k=0;
        int temp;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<2;j++)
            {
                cKey[i][j]=sKey.charAt(k);
                k++;
                iKey[i][j]=(int)cKey[i][j]; //program is terminated after this line
                iKey[i][j]-=97;
                if(cKey[i][j]<97 || cKey[i][j]>122)
                {
                    flag=false;
                    break;
                }
            }
            if(flag==false)
            {
                System.out.println("flag: "+flag);
                break;
            }
        }

        int d;
        if((d=iKey[0][0]*iKey[1][1]-iKey[1][0]*iKey[0][1])==0)
            flag=false;
        if(flag==false)
            System.out.println("Invalid Key!! ");
        else
             keygen(d);
        return flag;
    }
    void keygen(int d)
    {
        if (d<0)
            d*=-1;
        for(int i=0;i<2;i++)
        {
            for(int j=0;j<2;j++)
            {
                if(i==0 && j==0)
                    iDKey[i][j]=iKey[1][1]/d;
                else if(i==1 && j==1)
                    iDKey[i][j]=iKey[0][0]/d;
                else
                    iDKey[i][j]=-iKey[i][j]/d;
            }
        }
     }

    String encrypt()
    {
        int l;
        if(sPlainTxt.length()%2==0)
            l=sPlainTxt.length();
        else
            l=sPlainTxt.length()+1;
        int temp1,temp2,ans;
        for(int i=0;i<l;i+=2)
        {
            temp1=(int)cPlainTxt[i]-97;
            temp2=(int)cPlainTxt[i+1]-97;
            ans=iKey[0][0]*temp1+iKey[0][1]*temp2;
            System.out.println(ans);
            ans%=26;            
            ans+=65;
            cCipherTxt[i]=(char)ans;
            cCipherTxt[i+1]=(char)((iKey[1][0]*temp1+iKey[1][1]*temp2)%26+65);
        }
        sCipherTxt=new String(cCipherTxt);
        return sCipherTxt;
    }

}

You never assign a value to iKey , so it has its initial default value of null - it's as simple as that. You need to create a new array, eg

// Given that you've hard-coded the length of cKey as well...
iKey = new int[2][2];

I'd also strongly urge you not to catch exceptions like this:

catch(Exception e)
{}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM