数组超出Java范围?

时间:2014-02-09 05:14:53

标签: java indexoutofboundsexception

我正在尝试运行此代码,但我不断遇到越界错误。这只是超类“Simpler”的子类。用户输入字符串然后将字符串分解为char数组。数组不应小于字符串但我收到此错误。你能告诉我我做错了什么吗?谢谢!

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

在for循环中没有停止条件,在这一行:

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

i获取1, 0, -1, ...并且如果-1不会抛出越界异常,则不会停止

答案 2 :(得分:0)

在for循环中,只需将条件从i < inPhrase.length()更改为i >= 0即可完成此任务。

答案 3 :(得分:0)

第一件事:

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

你永远不会进入你的循环,因为你指定了i = n&amp;进入条件是i&lt; Ñ

应该是

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

现在,这也会删除你的arrayoutofbound异常,因为之前,你试图访问chars [n],它实际上是该数组的第n + 1个字符。