【问题标题】:Array out of bounds in Java?Java中的数组越界?
【发布时间】:2014-02-09 05:14:53
【问题描述】:

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

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

【问题讨论】:

    标签: java indexoutofboundsexception


    【解决方案1】:

    我认为您的 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);
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        在 for 循环中,只需将条件从 i &lt; inPhrase.length() 更改为 i &gt;= 0 即可。

        【讨论】:

          【解决方案4】:

          第一件事:

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

          你永远不会进入你的循环,因为你分配了 i = n 并且进入条件是 i

          应该是

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

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

          【讨论】:

            猜你喜欢
            • 2019-05-10
            • 2015-10-26
            • 1970-01-01
            • 2013-04-02
            • 2013-08-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多