该程序应该使用一个句子并返回大写字母,小写字母和数字的数量。它编译,请求输入,并返回:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 9
at java.lang.String.charAt(Unknown Source)
at projects.projectzero.check(projectzero.java:16)
at projects.projectzero.main(projectzero.java:10)
package projects;
import javax.swing.JOptionPane;
public class projectzero {
public static void main(String args[]) {
String sentence = "", addToSentence = "";
while (!addToSentence.equalsIgnoreCase("stop")) {
addToSentence = JOptionPane.showInputDialog("input words or enter stop to end program");
sentence += addToSentence;
}
check(sentence);
}
public static void check(String input) {
int upperCase = 0, lowerCase = 0, numbers = 0;
for (int i = 0; i <= input.length(); i++) {
char c = input.charAt(i);
if (Character.isUpperCase(c))
upperCase++;
else if (Character.isLowerCase(c))
lowerCase++;
else if (Character.isDigit(c)) numbers++;
}
System.out.println("the number of uppercase: " + upperCase + " the number of lower case : " + lowerCase + "the number of digits is: "
+ numbers);
}
}
出了什么问题?
答案 0 :(得分:2)
String
(或数组或List
)中的最后一个可用索引是length() - 1
,但如果{for
,则不会停止i
循环1}}到达length()
。
在i
到达length()
之前停止迭代。将<=
替换为<
。
for ( int i = 0 ; i < input.length() ; i++ ) {
答案 1 :(得分:0)
Java中的数组是基于零的。所以你的循环必须停在input.length()-1
for ( int i = 0 ; i < input.length() ; i++ ) {
答案 2 :(得分:0)
检查i < input.length()
而不是i <= input.length()
。
编辑这是有效的,因为索引是从零开始的:第一个条目位于i= 0
,第二个条目位于i=1
,等等。因此最终条目位于{{ 1}}。