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 < inPhrase.length()
更改为 i >= 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中的数组越界?的主要内容,如果未能解决你的问题,请参考以下文章