java - 阿拉伯语到罗马语转换器: ArrayIndexOutOfBounds

标签 java arrays converters indexoutofboundsexception roman-numerals

我正在制作阿拉伯数字转换器并收到错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at arab2Roman.arabicToRoman(arab2Roman.java:27)
    at arab2Roman.main(arab2Roman.java:178)

任何建议/反馈将不胜感激。

public class arab2Roman {

    public static String arabicToRoman(int Arabic) {
        if (Arabic==-1) {
            System.out.println("Program exiting...");
            System.exit(0);
        } else if (Arabic<=0) {
            return "Invalid Option: Must be greater than 0";
        } else if (Arabic>=4000) {
            return "Invalid Option: Must be under 4000.";
        } else {
            String banana = new String();
            String temp = Integer.toString(Arabic);
            int[] arabArray = new int[temp.length()];
            for (int i = 0; i < temp.length(); i++) {
                arabArray[i] = temp.charAt(i) - '0';
            } 
            int o = 0;
            char[] romanArray = new char[o];
            for (int i=0;i<temp.length();) {
                if (temp.length()==4) {
                    if (arabArray[0]==3) {
                        for (;o<3;o++) {
                            romanArray[o] = 'M';    
                        }
                    } else if (arabArray[0]==2) {
                        for (;o<2;o++) {
                            romanArray[o] = 'M';    
                        }
                    } else if (arabArray[0]==1) {
                        romanArray[0]= 'M';
                    }
                    if (arabArray[1]==9) {
                        romanArray[o]='C';
                        o++;
                        romanArray[o]='M';
                        o++;
                    } else if (arabArray[1]==8) {
                        romanArray[o]='D';
                        o++;
                        for (int p=o;o<p+3;o++) {
                            romanArray[o]='C';
                        }
                    } else if (arabArray[1]==7) {
                        romanArray[o]='D';
                        o++;
                        for (int p=o;o<p+2;o++) {
                            romanArray[o]='C';
                        }
                    } else if (arabArray[1]==6) {
                        romanArray[o]='D';
                        o++;
                        romanArray[o]='C';
                        o++;
                    } else if (arabArray[1]==5) {
                        romanArray[o]='D';
                        o++;
                    } else if (arabArray[1]==4) {
                        romanArray[o]='C';
                        o++;
                        romanArray[o]='D';
                        o++;
                    } else if (arabArray[1]==3) {
                        for (int p=o;o<p+3;o++) {
                            romanArray[o]='C';
                        }
                    } else if (arabArray[1]==2) {
                        for (int p=o;o<p+2;o++) {
                            romanArray[o]='C';
                        }
                    } else if (arabArray[1]==1) {
                        romanArray[o]='C';
                        o++;
                    }
                    if (arabArray[2]==9) {
                        romanArray[o]='X';
                        o++;
                        romanArray[o]='C';
                        o++;
                    } else if (arabArray[2]==8) {
                        romanArray[o]='L';
                        o++;
                        for (int p=o;o<p+3;o++) {
                            romanArray[o]='X';
                        }
                    } else if (arabArray[2]==7) {
                        romanArray[o]='L';
                        o++;
                        for (int p=o;o<p+2;o++) {
                            romanArray[o]='X';
                        }
                    } else if (arabArray[2]==6) {
                        romanArray[o]='L';
                        o++;
                        romanArray[o]='X';
                        o++;
                    } else if (arabArray[2]==5) {
                        romanArray[o]='L';
                        o++;
                    } else if (arabArray[2]==4) {
                        romanArray[o]='X';
                        o++;
                        romanArray[o]='L';
                        o++;
                    } else if (arabArray[2]==3) {
                        for (int p=o;o<p+3;o++) {
                            romanArray[o]='X';
                        }
                    } else if (arabArray[2]==2) {
                        for (int p=o;o<p+2;o++) {
                            romanArray[o]='X';
                        }
                    } else if (arabArray[2]==1) {
                        romanArray[o]='X';
                        o++;
                    }
                    if (arabArray[3]==9) {
                        romanArray[o]='I';
                        o++;
                        romanArray[o]='X';
                        o++;
                    } else if (arabArray[3]==8) {
                        romanArray[o]='V';
                        o++;
                        for (int p=o;o<p+3;o++) {
                            romanArray[o]='I';
                        }
                    } else if (arabArray[3]==7) {
                        romanArray[o]='V';
                        o++;
                        for (int p=o;o<p+2;o++) {
                            romanArray[o]='I';
                        }
                    } else if (arabArray[3]==6) {
                        romanArray[o]='V';
                        o++;
                        romanArray[o]='I';
                        o++;
                    } else if (arabArray[3]==5) {
                        romanArray[o]='V';
                        o++;
                    } else if (arabArray[3]==4) {
                        romanArray[o]='I';
                        o++;
                        romanArray[o]='V';
                        o++;
                    } else if (arabArray[3]==3) {
                        for (int p=o;o<p+3;o++) {
                            romanArray[o]='I';
                        }
                    } else if (arabArray[3]==2) {
                        for (int p=o;o<p+2;o++) {
                            romanArray[o]='I';
                        }
                    } else if (arabArray[3]==1) {
                        romanArray[o]='I';
                        o++;
                    }
                    banana = new String(romanArray);
                    i++;
                    return banana;
                }
            }
        }
        return null;
    }

    public static void main(String[] args) {
        @SuppressWarnings("resource")
        Scanner dog = new Scanner(System.in);
        for (int i=0;i==0;) {
            System.out.println("Enter a number (1-3996) to convert to Roman Numberals(enter -1 to exit):");
            int Arabic = dog.nextInt();
            System.out.println(arabicToRoman(Arabic));
        }
    }
}

最佳答案

这里有很多东西可以改进/简化,但看起来主要问题是:

int o = 0;
char[] romanArray = new char[o];

这将创建一个大小为 0 的数组,因此 romanArray[0] 是向下越界的。

关于java - 阿拉伯语到罗马语转换器: ArrayIndexOutOfBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26578783/

相关文章:

java - AsyncTask 和 JSOUP 配合得很好

java - 无法在 Javadoc 注释中链接到 JDK10

javascript - 索引的值使用循环插入到下一行

javascript - 映射数组中对象中的数组

java - 安卓游戏: How often should the server be pinged?

java - 当我扩展 ArrayList 或其他常见集合时,gwt 构建中出现奇怪的异常/错误

java - Hangman Java 游戏打印错误和正确的猜测

java - 在 Vaadin 表中设置字符串到 LocalDate 转换器

jsf-2 - Jsf 自定义转换器生命周期