我知道这是一个简单的解决办法,但它正在扼杀我。我试图查看其他问题,但无法找到任何有帮助的问题。这是我在这里发布的最后一个选项,因为我没时间完成这个程序。该程序从文件中读取数字并打印出每个数字的单词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();
}
}
答案 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'
之前处理字符作为读者的练习。