StringIndexOutOfBoundsException - PullRequest
       1

StringIndexOutOfBoundsException

0 голосов
/ 20 июня 2010

Эта программа, которую я создаю, неправильно компилируется, я получаю сообщение об ошибке: Исключение в потоке "main" java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: -9 в java.lang.String.charAt (String.java:687) на pro1.main (pro1.java:161)

Вот мой код:

import java.io.*;
import java.util.*;
public class pro1 {
    static String str="";
    static String str1="";
    static int range=250;
    static int length;
    static String key="";
    static String ep="";
       static String pt="";
    static char temp;
    static int t,p,h;
    static int r,x,y,z,w;
    static Random generator = new Random();
 static public String getContents(File aFile) 
   {
   StringBuilder contents = new StringBuilder();
   try {
      BufferedReader input =  new BufferedReader(new FileReader(aFile));
      try {
        String line = null; 
        while (( line = input.readLine()) != null){
          contents.append(line);
          contents.append(System.getProperty("line.separator"));
        }
      }
      finally {
        input.close();
      }
    }
    catch (IOException ex){
      ex.printStackTrace();
    }
    str1=contents.toString();
    return str1;
    }



public static void main (String args[]) throws IOException {
      File testFile = new File("/home/amritha/Desktop/sam.txt");
      System.out.println("Original file contents: " + getContents(testFile));
      System.out.println("message:"+str1);
       String sbox="abcdefghijklmnopqrstuvwxyz";
       length=str1.length()-1;
        for(int i=0;i<length;i++)
        {
           t=(int)str1.charAt(i);
             if(t==32)
              {
               int t1=32;
               temp=(char)t;
              }
            else
              {
               range=generator.nextInt(26)+1;
               temp=sbox.charAt(range);
              }
              key+=""+temp;
        }
       System.out.println("Key:"+key);
       for(int i=0;i<length;i++)
       {
         t=(int)str1.charAt(i);
          {
            if(t==32)
             {
               t=32;
               temp=(char)t;
             }
            else
             {
               t-=97;
             }
          }
        p=(int)key.charAt(i);
          {
           if(p==32)
            {
               p=32;
               temp=(char)p;
            }
           else
            {
              p-=97;
            }
          }
        if((t==32)&&(p==32))
           {
                int v=32;
                temp=(char)v;
           }
           else
           {
            r=(t+p)%26;
           temp=sbox.charAt(r);
           }
           ep+=""+temp;
       }
         System.out.println("Encrypted Text:"+ep);

   for(int i=0;i<length;i++)
       {
         y=(int)ep.charAt(i);
          {
            if(y==32)
             {
               y=32;
               temp=(char)y;
             }
            else
             {
               y-=97;
             }
          }
        x=(int)key.charAt(i);
          {
           if(x==32)
            {
               x=32;
               temp=(char)x;
            }
           else
            {
              x-=97;
            }
          }
        if((x==32)&&(y==32))
           {
                int w=32;
                temp=(char)w;
           }
           else
           {
            z=(y-x)%26;
           temp=sbox.charAt(z);
           }
           pt+=""+temp;
       }
         System.out.println("deccrypted Text:"+pt);
  }
}

Ответы [ 2 ]

4 голосов
/ 20 июня 2010

Ваш код выглядит подозрительно во всех отношениях, и я не могу представить, чтобы кто-то хотел прочитать 170 строк этого кода.

Посмотрите на исключение: оно точно говорит вам, что идет не так: вы передаете -9 в charAt() в качестве индекса, который, очевидно, выходит за пределы диапазона, поскольку вы должны передавать туда только 0 ... (length-1).

И он также дает вам номер строки ...перейдите к строке 161 и посмотрите, что там и как оно туда попало.

3 голосов
/ 20 июня 2010

Я думаю, что это как-то связано с этой строкой:

z=(y-x)%26;

Если x больше y, результат операции% может быть отрицательным (или 0).И charAt (то есть то, для чего z задан в качестве параметра) ожидает положительное значение.Вы должны попробовать:

z=Math.abs(y-x)%26;

Редактировать: В качестве примечания, это не должно быть трудно выяснить самостоятельно, глядя на исключение, как было указано другими, или в худшем случаеслучай использования отладчика и точного определения значений различных переменных и причины возникновения исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...