8

我是java新手,还在学习,所以请记住这一点。我正在尝试编写一个程序,用户可以在其中输入关键字并将其转换为数字并将其放入数组中。我的问题是数组需要不断重复整数。

我的代码是:

String keyword=inputdata.nextLine();
int[] key = new int[keyword.length()];
for (int k = 0; k < keyword.length(); ++k)
{
    if (keyword.charAt(k) >= 'a' && keyword.charAt(k) <= 'z')
    {
        key[k]= (int)keyword.charAt(k) - (int)'a';
    }
}

现在,如果我尝试获得key[i]keyword.length它更高的值,它会引发outofbounds错误。我需要它是无限的。

所以基本上,如果keyword.length()是 3,我需要能够查看是否与等key[2]相同。key[5]key[8]

谢谢你的帮助!

4

1 回答 1

4

好吧,首先通过一些重构来修复代码是最简单的。将 的所有用途提取keyword.charAt(k)到一个局部变量中:

for (int k = 0; k < keyword.length(); ++k)
{
    char c = keyword.charAt(k);
    if (c >= 'a' && c <= 'z')
    {
        key[k] = c'a';
    }
}

然后我们可以解决%运营商的问题:

// I assume you actually want a different upper bound?
for (int k = 0; k < keyword.length(); ++k)
{
    char c = keyword.charAt(k % keyword.length());
    if (c >= 'a' && c <= 'z')
    {
        key[k] = c - 'a';
    }
}

那是假设您实际上keykeyword- 更长,并且您可能也想更改循环的上限。例如:

int[] key = new int[1000]; // Or whatever
for (int k = 0; k < key.length; ++k)
{
    char c = keyword.charAt(k % keyword.length());
    if (c >= 'a' && c <= 'z')
    {
        key[k] = c - 'a';
    }
}
于 2013-05-09T18:05:34.370 回答