【发布时间】:2013-07-11 13:42:19
【问题描述】:
这是我必须编写的程序,但出现此错误,
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:
50
用两个数组写一个完整的程序,upper和lower保持upper 和小写字母分别。 要求用户输入字符串示例:
这是来自木星的测试。很快你就会看到谁来自 木星!!!可能是D博士。
您的程序应该解析字符串并跟踪字母的数量。两个数组的索引都是从 0 到 25。这样做的逻辑方法是使用 upper[0] 来 计算‘A’的个数,用upper[1]计算‘B’的个数,以此类推。同样地 对于较低的数组。
输出应如下所示:
A: 0 a:2
B: 0 b:0
.
.
.
Z:0 z:0
代码
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.util.*;
public class Letter {
public static void main(String[] args) {
// this is get results
char[] chars = userEnters();
System.out.println();
System.out.println("Occurrences of each letter are:");
PrintArray(countLow(chars), countUp(chars));
}
public static char[] userEnters() {
String inputX = JOptionPane.showInputDialog("Enter line of text: ");
char[] chars = inputX.toCharArray();
return chars;
}
public static int[] countLow(char[] input) {
int[] counts = new int[26];
for (int i = 0; i < input.length; i++) {
counts[input[i] - 'a']++;
}
return counts;
}
public static int[] countUp(char[] input2) {
int[] countsUp = new int[26];
for (int i = 0; i < input2.length; i++) {
countsUp[input2[i] - 'A']++;
}
return countsUp;
}
public static void PrintArray(int[] counts, int[] countsUp) {
for (int i = 0; i < counts.length; i++) {
System.out.print(counts[i] + " " + (char) ('a' + i) + " ");
System.out.print(countsUp[i] + " " + (char) ('A' + i) + "\n");
}
}
}
【问题讨论】:
-
你得到了什么输出?
-
当您在
countLow并且 input[i] 是大写字母时,您认为会发生什么? -
您可能希望过滤掉“无效”字符,例如
!、` ` 和.,因为它们的代码点不在a-z或A-Z内。 -
正如其他人所说:在计算小写/大写字母之前,您必须确保它实际上是小写/大写字母。