我有这个问题, 线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:100 在Exercise_12_2.main(Exercise_12_2.java:28) 当我试图仅简单地计算字符数组中字母的出现时。我似乎无法全神贯注于如何解决这个问题。我已经去了几个小时。请帮助我走上正确的轨道。
import java.util.Scanner;
public class Exercise_12_2
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in); // Setup scanner
char[] charArray = new char[100];
int[] counts = new int[26];
char tempinput = '?';
System.out.print("Enter letters (or ! to quit): ");
while (tempinput != '!')
{
tempinput = (input.next()).charAt(0);
charArray[tempinput]++;
for (int c = 'a'; c <= 'z'; c++)
{
for (int k = 0; k <= charArray.length; k++)
{
if (c == charArray[k])
{
counts[c] += 1;
}
}
}
}
}
public static void displayCounts(int[] counts)
{
for (int i = 0; i < counts.length; i++)
{
if ((i + 1) % 10 == 0)
{
System.out.println(counts[i] + " " + (char)(i + 'a'));
}
else
{
System.out.print(counts[i] + " " + (char)(i + 'a') + " ");
}
}
}
}
到目前为止,这是我的代码。请帮助我。
{{1}}
答案 0 :(得分:1)
java.lang.ArrayIndexOutOfBoundsException: 100
表示您要查询仅包含100个元素的数组的第101个元素。请记住,Java数组的索引从0开始。
从中您可能可以分辨出此行的原因:
for (int k = 0; k <= charArray.length; k++)
charArray.length
是100
,所以您要运行直到k
是101
,这意味着您尝试使用charArray[100]
来请求{的第101个元素{1}},但是 charArray
只有100个元素。
如果将charArray
切换为k <= charArray.length
,您应该走得更远。
在不相关的注释上,k < charArray.length
不起作用。 counts[c] += 1;
的{{1}}值是其ascii值。例如,字母int
是char
,因此您将远离a
数组的末尾。这也不考虑大小写(数值不同)的情况。
答案 1 :(得分:1)
如果使用适当的数据结构,此问题会变得更容易 。例如,我将使用Map<Character, Integer>
保留计数,然后对其进行迭代显示。喜欢,
Scanner input = new Scanner(System.in); // Setup scanner
System.out.print("Enter letters (or ! to quit): ");
Map<Character, Integer> map = new HashMap<>();
char ch;
while ((ch = Character.toLowerCase(input.next().charAt(0))) != '!') {
map.put(ch, map.getOrDefault(ch, 0) + 1);
}
System.out.println("Counts:");
for (int c = 'a'; c <= 'z'; c++) {
if (map.containsKey((char) c)) {
System.out.printf("%c\t%d%n", c, map.get((char) c));
}
}
我用您的示例输入进行了测试,并得到了要求:
Enter letters (or ! to quit): a a a b b c !
Counts:
a 3
b 2
c 1
答案 2 :(得分:0)
我认为在创建[a, a, b c, d, !, ..]
的字符数组之后,下面的代码足以计算每个字母[a-z]
的计数。
for (int k = 0; k < charArray.length; k++)
{
char c = charArray[k];
if (c >= 'a' && c <= 'z' )
{
counts[c - 'a'] += 1;
}
}