我正在为COSC课程制作的这个程序没有正确编译,我不断收到错误:
线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:2
at java.lang.String.substring(String.java:1765) 在VowelCount.main(VowelCount.java:13)
这是我的代码:
import java.util.Scanner;
public class VowelCount {
public static void main(String[] args) {
int a = 0, e = 0, i = 0, o = 0, u = 0, count = 0;
String input, letter;
Scanner scan = new Scanner (System.in);
System.out.println ("Please enter a string: ");
input = scan.nextLine();
while (count <= input.length() ) {
letter = input.substring(count, (count + 1));
if (letter == "a") {
a++; }
if (letter == "e") {
e++; }
if (letter == "i") {
i++; }
if (letter == "o") {
o++; }
if (letter == "u") {
u++; }
count++;
}
System.out.println ("There are " + a + " a's.");
System.out.println ("There are " + e + " e's.");
System.out.println ("There are " + i + " i's.");
System.out.println ("There are " + o + " o's.");
System.out.println ("There are " + u + " u's.");
}
}
据我所知,这应该有用,但为什么不呢?任何帮助都会很棒。谢谢!
答案 0 :(得分:5)
你可能需要取出<= p>中的=
while (count <= input.length() ) {
并制作
while (count < input.length() ) {
因为它导致子串读取超出字符串的长度。
=============== 但是我会添加一些额外的建议,即使它没有被要求:
不要使用==来比较字符串,请使用
letter.equals("a")
代替。或者甚至更好,尝试使用
char c = input.charAt(count);
获取当前角色然后比较如下:
c == 'a'
答案 1 :(得分:0)
删除等号应该可以解决这个问题。
while (count < input.length()) {
由于你想得到一个角色,你应该这样做:
substr(count,1)
因为第二个参数实际上是长度,而不是索引。
答案 2 :(得分:0)
我认为你的循环条件应该是count < input.length
。现在,最后一次迭代使用count == length
运行,因此您的substring
调用在字符串中的最后一个字符之后被赋予一个起始索引,这是非法的。在编写这样的循环时,这些类型的边界错误非常常见,因此当遇到类似这样的错误时,对循环条件进行双重和三重检查总是好的。
此外,将字符串与==
运算符进行比较通常不会达到您想要的效果。比较两个变量是否引用同一个对象。相反,您想要测试string1.equals(string2)
,它会比较两个字符串的内容。
答案 3 :(得分:0)
在每个人的帮助下修复它,尤其是文森特。谢谢!运行得非常好。
import java.util.Scanner;
public class VowelCount {
public static void main(String[] args) {
int a = 0, e = 0, i = 0, o = 0, u = 0, count = 0;
String input;
char letter;
Scanner scan = new Scanner (System.in);
System.out.print ("Please enter a string: ");
input = scan.nextLine();
while (count < input.length() ) {
letter = input.charAt (count);
if (letter == 'a')
a++;
if (letter == 'e')
e++;
if (letter == 'i')
i++;
if (letter == 'o')
o++;
if (letter == 'u')
u++;
count++;
}
System.out.println ("There are " + a + " a's.");
System.out.println ("There are " + e + " e's.");
System.out.println ("There are " + i + " i's.");
System.out.println ("There are " + o + " o's.");
System.out.println ("There are " + u + " u's.");
}
}
答案 4 :(得分:0)
在循环之前,请尝试以下
if(input.length()>0){
//you code
}