A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© bowen-xiao 中级黑马   /  2015-1-12 11:20  /  797 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请大家先慢慢看完代码,有环境的先运行一下。看似一道完美的程序问题到底出在了哪里?

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 提供两种不同的类型:引用类型和原始类型(或内置类型)。Intjava的原始数据类型,Integerjavaint提供的封装类。在32位机器上,能表示的最大值是2^32 = 4 294 967 296
最小值:Integer.MIN_VALUE=-2147483648
最大值:Integer.MAX_VALUE=2147483647
111111111111
已经越界了


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马