2013-09-29 3 views
0

다음 HillCipher 프로그램을 실행하려고하지만 char 배열을 int 배열로 변환 한 후 해당 코드를 컴파일 한 후 null 포인터를 표시합니다. 내가 INT 변수로 int 배열을 교체하는 경우 exception.It 잘 작동하지만 데이터를 암호화하는이 코드에서 int 배열이 필요합니다자바에서 int 배열 변환에 char 배열이 null 포인터 예외를 생성합니다

 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; 
    } 

} 
+1

당신은 * 많은 * 코드의 부여했습니다

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

는 또한 강하게는 다음과 같이 예외를 잡으려고하지 말라고 촉구 것입니다. 장래에 문제를 보여주는 * 짧은 * 프로그램을 작성하십시오. –

+0

차라리 전체 코드 *를 갖고 싶지만 * 예외가 발생하여 디버깅이 훨씬 쉬워졌습니다. 클래스는 시작 부분에 obvisouly 잘 렸습니다. – Koraktor

답변

3

당신은 iKey에 값을 할당하지를, 그래서 그것의 초기 기본 값이 null - 간단합니다. 새 배열을 만들어야합니다 (예 :

catch(Exception e) 
{} 
관련 문제