Java 元音检查-数组越界错误

Java 元音检查-数组越界错误,java,runtime-error,Java,Runtime Error,我正在尝试编写一个程序,它接受小写的单词,将其转换为大写,并将单词中的元音转换为下一个字母表。到目前为止,我已经做到了: import java.util.*; class prg11 { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.println("Enter a word in lowercase.");

我正在尝试编写一个程序,它接受小写的单词,将其转换为大写,并将单词中的元音转换为下一个字母表。到目前为止,我已经做到了:

import java.util.*;
class prg11
{
    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter a word in lowercase.");
        String word = sc.next();
        word = word.toUpperCase();
        int length = word.length();
        char ch[] = new char[length+1];
        for (int i = 0; i<=length; i++)
        {
            ch[i] = word.charAt(i);
            if("aeiou".indexOf(ch[i]) == 0)
            {
                ch[i]+=1;
            }
        }
        String str = new String(ch);
        System.out.println(str);
    }
}
import java.util.*;
prg11类
{
公共静态void main(字符串参数[])
{
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入小写单词”);
字符串字=sc.next();
word=word.toUpperCase();
int length=word.length();
char ch[]=新字符[长度+1];
对于(int i=0;i使用:


for(int i=0;i使用
for(int i=0;i
将只匹配“a”字符(因为这是索引0处的字符)。您应该查找大于-1的任何索引。此外,由于您已经将字符串转换为大写,您应该检查“aeiou”根据问题中的代码,需要更改三个位置,而不是“aeiou”。

word = word.toUpperCase();
int length = word.length();

// yours: char ch[] = new char[length + 1];
// resulting array needs to be as same length as the original word
// if not, there will be array index out of bound issues
char ch[] = new char[length];

// yours: for (int i = 0; i<=length; i++)
// need to go through valid indexes of the array - 0 to length-1
for (int i = 0; i < length; i++) {
    ch[i] = word.charAt(i);
    // yours: if ("aeiou".indexOf(ch[i]) == 0) {
    // two problems when used like that
    // 1. indexOf() methods are all case-sensitive
    //    since you've uppercased your word, need to use AEIOU
    // 2. indexOf() returns the index of the given character
    //    which would be >= 0 when that character exist inside the string
    //    or -1 if it does not exist
    //    so need to see if the returned value represents any valid index, not just 0
    if ("AEIOU".indexOf(ch[i]) >= 0) {
        ch[i] += 1;
    }
}

我想这应该可以,如果不行就告诉我

public class prg11 {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a word.");
    String word = sc.next();
    sc.close();
    word = word.toUpperCase();
    int length = word.length();
    char ch[] = new char[length+1];
    for (int i = 0; i<length; i++) {
        ch[i] = word.charAt(i);
        if("AEIOU".indexOf(ch[i]) > -1) {
            ch[i]+=1;
        }
    }
    String str = new String(ch);
    System.out.println(str);
}
}
公共类prg11{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入一个单词”);
字符串字=sc.next();
sc.close();
word=word.toUpperCase();
int length=word.length();
char ch[]=新字符[长度+1];
对于(int i=0;i-1){
ch[i]+=1;
}
}
字符串str=新字符串(ch);
系统输出打印项次(str);
}
}
让我知道它是否有效。

快乐编码;)-Charlie

是的,我这样做了,越界错误得到了解决。但现在,我面临另一个运行时错误,我已在编辑中解释过。感谢您的帮助!
String word = sc.next().toUpperCase();
char ch[] = word.toCharArray();
for (int i = 0; i < ch.length; i++) {
    if ("AEIOU".indexOf(ch[i]) >= 0) {
        ch[i] += 1;
    }
}
public int indexOf(int ch)

Returns the index within this string of the first occurrence of the specified character.
If a character with value ch occurs in the character sequence represented by this String object,
then the index (in Unicode code units) of the first such occurrence is returned.
For values of ch in the range from 0 to 0xFFFF (inclusive), this is the smallest value k such that:

     this.charAt(k) == ch

is true. For other values of ch, it is the smallest value k such that:

     this.codePointAt(k) == ch

is true. In either case, if no such character occurs in this string, then -1 is returned.

Parameters:
    ch - a character (Unicode code point).
Returns:
    the index of the first occurrence of the character in the character sequence represented by this object,
    or -1 if the character does not occur.
public class prg11 {
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a word.");
    String word = sc.next();
    sc.close();
    word = word.toUpperCase();
    int length = word.length();
    char ch[] = new char[length+1];
    for (int i = 0; i<length; i++) {
        ch[i] = word.charAt(i);
        if("AEIOU".indexOf(ch[i]) > -1) {
            ch[i]+=1;
        }
    }
    String str = new String(ch);
    System.out.println(str);
}
}