数组索引超出范围并导致错误?

时间:2015-06-27 01:38:20

标签: arrays indexoutofboundsexception

我知道这是一个简单的解决办法,但它正在扼杀我。我试图查看其他问题,但无法找到任何有帮助的问题。这是我在这里发布的最后一个选项,因为我没时间完成这个程序。该程序从文件中读取数字并打印出每个数字的单词vale。 30:三零,150:一零五

错误显示代码行超出界限

System.out.print(alsoWords [((int)digit - 0)] +“”);

    package main;

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;

    public class Main {

// can use String array instead of Map as suggested in comments
private static final String[] alsoWords = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

public static void main(String args[]) //throws FileNotFoundException 
{
    Scanner fin = null;
 //           Scanner scanner = new Scanner(new File("translates.txt"));
 //
 //           while (scanner.hasNextInt())
    {
        try {
            fin = new Scanner(new File("C:\\Users\\Brian2\\Documents\\NetBeansProjects\\main\\src\\main\\translate.txt"));
        } catch (FileNotFoundException e) {
            System.err.println("Error opening the file translates.txt");
            System.exit(1);
        }
        while (fin.hasNext()) {
            int i = 0;
            i ++;
            char[] chars = ("" + fin.nextInt()).toCharArray();

            System.out.print(String.valueOf(chars) + ": ");

            // for each digit in a given number
            for (char digit : chars) {
                System.out.println(i);
                System.out.print(alsoWords[((int) digit - 0)] + " ");

            }
            System.out.println();
        }
    }

    fin.close();

}
 }

1 个答案:

答案 0 :(得分:2)

在调试器中逐步执行代码。检查每个变量的值。

for (char digit : chars)

digit是Unicode字符。

(int) digit

您获得digit的Unicode点。对于ASCII个字符,这与ASCII值相同。例如,NUL的ASCII值为零。字符0的ASCII值为48。假设第一个字符为零。你得到了:

48 - 0

这是48。

alsoWords[48]

超出范围。你想要:

alsowords[(int)digit - (int)'0']

如何在'0'之前处理字符作为读者的练习。