请大家先慢慢看完代码,有环境的先运行一下。看似一道完美的程序问题到底出在了哪里?
import java.util.Scanner; /** * 从键盘接受一个数字,列出该数字的中文表示格式 * 例如: 键盘输入123,打印出一二三 * 键盘输入3103,打印出三一零三 * */
public class Test3 {
// 用于跳出循环的标志 private static boolean isrun = true; // 提示字符数组 private static String[] str = new String[]{"提示:请输入您要转换的数字,","输入完成后请按回车查看结果"}; public static void main(String[] args) { // 作为while循环输出提示的终止条件和要输出的字符数组的下标 int i = 0; // 在提示语句不为空的情况下,输出所有数组内提示语句 while (str.length != i) { // 输出提示语句,同时把i的值增加 System.out.println(str[i++].toString()); } // 循环接收并处理输入的字符 while (isrun) { // 初始化接收键盘输入的scanner变量 Scanner userInput = new Scanner(System.in); // 获取用户输入的字符串 String input = userInput.nextLine(); // 该异常会在输入的不是数字的情况下进入catch异常处理 try { @SuppressWarnings("unused") int n = Integer.valueOf(input);
System.out.print("您输入的数字是:" + input + "\n" + "处理后的结果是:"); // 进入循环来将数字转换成数字字符,以输入的数据的长度为for循环的结束条件 for (int j = 0; j < input.length(); j++) { // 将输入的数据取子串,一次取一个,然后在进行判断转换成想要的结果 switch (Integer.valueOf(input.substring(j, j + 1))) { // 判断该数字是0的话转换成零 case 0: { System.out.print("零"); break; } case 1: { System.out.print("一"); break; } case 2: { System.out.print("二"); break; } case 3: { System.out.print("三"); break; } case 4: { System.out.print("四"); break; } case 5: { System.out.print("五"); break; } case 6: { System.out.print("六"); break; } case 7: { System.out.print("七"); break; } case 8: { System.out.print("八"); break; } case 9: { System.out.print("九"); break; } default: break; } } System.out.println(); // 进入异常处理,输入数字以外的字符 } catch (Exception e) { // 用户输入有误或者是不知道规则 System.out.println("您输入的格式不符合要求!!请重新输入:"); } } }
} 问题:111111111111超过了最大表示范围,所以会报错。 问题小结:代码没有完美的代码,要用心把异常的处理做到位,不然出了问题在哪里都不知道。
问题分析如下:
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。在32位机器上,能表示的最大值是2^32 = 4 294 967 296。
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
111111111111 已经越界了
|