黑马程序员技术交流社区
标题: 小程序小总结 [打印本页]
作者: bowen-xiao 时间: 2015-1-12 11:20
标题: 小程序小总结
请大家先慢慢看完代码,有环境的先运行一下。看似一道完美的程序问题到底出在了哪里?
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 已经越界了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |