Java中的数组越界?

Posted

技术标签:

【中文标题】Java中的数组越界?【英文标题】:Array out of bounds in 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);
        
    

【问题讨论】:

【参考方案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 个字符。

【讨论】:

以上是关于Java中的数组越界?的主要内容,如果未能解决你的问题,请参考以下文章

在android中,数据下标越界,则发生啥异常

java arraylist越界问题

5.java.lang.IndexOutOfBoundsException(数组下标越界异常)

Java常见的错误种类

数组越界 —— 解决方法

Jmeter中outofmemoryError内存溢出、数组越界等问题汇总