本帖最后由 杨兴庭 于 2013-7-13 08:38 编辑
代码如下:
当我输入字母的时候提示:重新输入
可是当我输入任何一个大于〇的数字时候都出现代码内存溢出的错误,程序停止运行
但是int类型的数字范围不是-128 ~127之间吗,为什么会出现内存溢出的错误?
另外请高手给出正确的处理方式,多谢啦!- import java.io.BufferedReader;
- import java.io.InputStreamReader;
- public class ExceptionDecimal {
- public static void main(String[] args) throws Exception {
- System.out.println("请输入一个十进制数,程序将其转换为其它进制:");
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- while(true) {
- String line= br.readLine();;
- try {
- int x = Integer.parseInt(line);
- toBinary(x);
- toOctal(x);
- toHex(x);
- break;
- } catch (NumberFormatException e) {
- System.out.println("您输入的不是数字,不能转换,请重新输入:");
- }
- }
- }
-
- static void toBinary(int x) throws Exception {
- StringBuffer sb = new StringBuffer();
- while(x > 0)
- sb.append(x % 2);
- x /= 2;
- sb.reverse();
- System.out.println("二进制:" + sb);
- }
-
- static void toOctal(int x) {
- StringBuffer sb = new StringBuffer();
- while(x > 0)
- sb.append(x % 8);
- x /= 8;
- sb.reverse();
- System.out.println("八进制:" + sb);
- }
-
- static void toHex(int x) {
- char[] ch = {'0','1','2','3','4','5','6','7','8', //把十六进制中的元素存储进char类型的数组ch中;
- '9','A','B','C','D','E','F'};
- StringBuffer sb = new StringBuffer();
- while(x > 0)
- sb.append(ch[x % 16]);
- x /= 16;
- sb.reverse();
- System.out.println("十六进制:" + sb);
- }
- }
- /*编译报错如下: //内存溢出:如何解决?
- * Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- * at cn.itcast.ExceptionDecimal.toBinary(ExceptionDecimal.java:25)
- at cn.itcast.ExceptionDecimal.main(ExceptionDecimal.java:13)*/
复制代码 |