2014-02-09 3 views
0

Я пытаюсь запустить этот код, но я продолжаю получать ошибку за пределы. Это просто подкласс для суперкласса «Simpler». Пользователь вводит строку, затем строка разбивается на массив символов. Массив не должен быть меньше строки, но я получаю эту ошибку. Можете ли вы сказать мне, что я делаю неправильно? Благодаря!Array за пределами Java?

import java.util.*; 
public class Encrypt extends Simpler 
{ 
    public void encryption() 
    { 
     boolean loop = true; 
     while(loop==true) 
     { 
      Scanner scan = new Scanner(System.in); 

      System.out.println("Please enter the phrase you'd like to encrypt: "); 
      String inPhrase = scan.nextLine(); 
      char[] chars = inPhrase.toCharArray(); 
      char tempArray[] = new char[chars.length+1]; 
      tempArray = chars; 
      chars = new char[tempArray.length]; 
      for (int i = inPhrase.length(); i<inPhrase.length(); i--) 
      { 
       if(chars[i]=='a') 
       { 
        chars[i]='1'; 
       } 
       else if(chars[i]=='b') 
       { 
        chars[i]='2'; 
       } 
       else if(chars[i]=='c') 
       { 
        chars[i]='3'; 
       } 
       else if(chars[i]=='d') 
       { 
        chars[i]='4'; 
       } 
       else if(chars[i]=='z')//I skipped some lines here for convienence 
       { 
        chars[i]='{'; 
       } 
       else if(chars[i]==' ') 
       { 
        chars[i]='}'; 
       } 
      } 
      String outPhrase = new String(chars); 
      System.out.println(outPhrase); 
     } 
    } 
} 

ответ

3

Я думаю, что ваше заявление for цикл должен выглядеть следующим образом:

for (int i = 0; i < inPhrase.length(); i++) 

, если вы рассчитываете, и как это:

for (int i = inPhrase.length() - 1; i >= 0; i--) 

если вы обратный отсчет.

обновление

На оглядываясь на него, я думаю, что есть больше, чем тот же. Я думаю, что ваш код должен быть переписан:

String inPhrase = scan.nextLine(); 
char[] chars = inPhrase.toCharArray(); 
char tempArray[] = new char[chars.length()]; 

for (int i = 0; i < chars.length(); i++) 
{ 
    if(chars[i]=='a') 
    { 
     tempArray[i]='1'; 
    } 
. 
. 
. 
. 
} 
String outPhrase = new String(tempArray); 
0

Нет остановку условия для цикла, в этой строке:

for (int i = inPhrase.length(); i<inPhrase.length(); i--) 

i получает 1, 0, -1, ... и не остановится, если -1 не будет бросать исключение за пределами

0

In for loop только изменение состояния от i < inPhrase.length() до i >= 0 сделает эту работу.

0

Первое:

for (int i = inPhrase.length(); i<inPhrase.length(); i--) 

вы никогда не ввести свой цикл, поскольку вы назначаете я = п & начальное условие, я < п.

должно быть

for (int i = inPhrase.length()-1; i>=0; i--) 

Теперь, это также удаляет ваше исключение arrayoutofbound потому что раньше, вы пытались получить доступ символов [N], который на самом деле п + 1-й символ этого массива.

Смежные вопросы