2016-03-18 35 views
0

我一直在試圖讓這段代碼正常工作,但是我一直在收到StringIndexOutOfBoundsException錯誤。任何人都可以幫我找到解決這個問題的方法嗎?我一直在試圖弄亂索引。第一個while循環單獨運行良好,但是當我把第二個循環用於香蕉時。如何修復StringIndexOutOfBoundsException?

public static String encrypt(int key, String name) { 
     String encryptedName = ""; 
     int i = 0; 

     while((int) name.charAt(i) > 64 && (int) name.charAt(i) < 91) { 
      if((int)name.charAt(i) + key > 90) { 
       encryptedName += (char) ((int) name.charAt(i) + key - 26); 
      } else { 
       encryptedName += (char) ((int) name.charAt(i) + key); 
      } 

      i++; 
     } 

     i = 0; 

     while((int) name.charAt(i) > 96 && (int) name.charAt(i+1) < 123 && i < name.length() - 1) { 
      System.out.println(i); 
      i++; 
      if((int)name.charAt(i) + key > 122) { 
       encryptedName += (char) ((int) name.charAt(i) + key - 26); 
      } else { 
       encryptedName += (char) ((int) name.charAt(i) + key); 
      } 
     } 

     return encryptedName; 
    } 
} 

這裏是我得到的錯誤:

java.lang.StringIndexOutOfBoundsException: String index out of range: 7 
    at java.lang.String.charAt(String.java:658) 
    at Cipher.encrypt(Cipher.java:61) 
    at Cipher.main(Cipher.java:26) 
+0

你能解釋你的代碼,並且包含代碼失敗的輸入嗎 – Bajal

+0

代碼的要點是從用戶處獲取第一名,第二名和第三名。然後它將通過使用該鍵打印出加密的名字以上字母表。大寫字符需要保持大寫,小寫字母保持較低。你不能走出字母表或得到任何數字。對於關鍵我使用12和名稱我會使用雷蒙德 所以,如果名稱以Z開頭,關鍵是1你會得到A作爲第一個字母等等等等 –

+0

哪個字符串是拋出索引錯誤?輸入明文​​,密鑰或密文?從你給我們我們不能確定第61行包含。 – rossum

回答

0

你可能需要添加到跳出循環的我變得太大之前的狀態。

E.g.

while (i < name.length() && ...) 

和第二循環,增加

while (i + 1 < name.length && ...) 
+0

我仍然得到相同的錯誤。對於key = 12和name = Raymond,它表示字符串索引超出範圍:7.我還在循環中放了一個println(i)語句來查看何時會出現錯誤,以及它在i = 5之後。 –

+0

順序很重要。i + 1 BPS

+0

如果這回答您的原始問題,請接受此答案並提出新問題。 – BPS

0

在第二循環的同時,嘗試移動我++來while循環的底部。

+0

我做到了,沒有工作。 –