黑马程序员技术交流社区

标题: 判断异常错误 要来人呢 [打印本页]

作者: 刘亮    时间: 2013-9-18 18:49
标题: 判断异常错误 要来人呢
本帖最后由 刘亮 于 2013-9-18 20:43 编辑

刚做了个题 输入整数 然后输出这个数的阶乘。 但不会判断错误。比如输入的是字母或者别的,如何按自己想编的来提示错误信息。  
public static void main(String[] args)
{
  System.out.print("请输出(整数):");        //输入的如果不是整数 如何输出自己想提示的错误信息
  Scanner sc = new Scanner(System.in);
  int num = sc.nextInt();
  int result = 1;
  for(int i = 1;i<=num;i++)
  {
   result *= i;
  }
  System.out.println(num+"!="+result);
}

作者: 神之梦    时间: 2013-9-18 18:56
用正则
作者: loading……99.9    时间: 2013-9-18 19:07
你可以先用一个String接受输入的一串字符串,在用正则表达式判断这个字符串是否全为数字,然后再把字符串转换为一个int型的数据。代码如下:
  1. public static void main(String[] args)
  2.         {
  3.                 System.out.print("请输出(整数):");

  4.                 Scanner scanner = new Scanner(System.in);

  5.                 String str = scanner.next();

  6.                 if (str.matches("\\d+"))
  7.                 {
  8.                         int num = Integer.parseInt(str);
  9.                         int result = 1;
  10.                         for (int i = 1; i <= num; i++)
  11.                         {
  12.                                 result *= i;
  13.                         }
  14.                         System.out.println(num + "!=" + result);
  15.                 }

  16.         }
复制代码

作者: 酱爆    时间: 2013-9-18 19:09
        public static void main(String[] args)
        {
                boolean flag = true;
               
                //while循环用于当用户输入数据异常时,可以让用户重新输入
                while (flag)
                {
                        try
                        {
                                int len = 0;   // 用来确定数组的长度
                                System.out.println("请输入数组的长度(整数):");
                                Scanner input = new Scanner(System.in);
                                len = input.nextInt();    //从控制台接收数组长度
                               
                                double[] arr = new double[len];
                               
                                // 用循环来接收数组的每个数据
                                for (int i = 0; i < arr.length; ++i)
                                {
                                        System.out.println("请输入第" + (i+1) + "个数");
                                        arr[i] = input.nextDouble();
                                }
                               
                                System.out.println("最大数 = " + max(arr));
                                System.out.println("最小数 = " + min(arr));
                               
                               
                               
                                flag = false;  // 当执行到这条语句说明没有异常,跳出循环
                        }
                        catch(Exception e)
                        {
                                System.out.println("输入数据不合法,请重新输入!");
                                //e.printStackTrace();
                        }
                }
        }
作者: (0.0)’    时间: 2013-9-18 19:15
不知道楼主学习到哪一块知识,如果没有学异常就只有当做用户很听话,让他输入什么就输入什么吧。
如果学习了异常就可以用try-catch来捕获到异常。可以简单处理:
  1. public static void main(String[] args){
  2.                 System.out.println("请输入一个整数:");
  3.                 Scanner sc = new Scanner(System.in);
  4.                 try {
  5.                         int num = sc.nextInt();
  6.                         int result = 1;
  7.                         for (int i = 1;i <=num ;i++ ) {
  8.                                 result *= i;
  9.                         }
  10.                         System.out.println(num + "!= "+result);
  11.                 }
  12.                 catch (Exception e) {
  13.                         System.out.println("非法输入,程序结束");
  14.                 }
  15.         }
复制代码
当然,异常还有自定义的,这里只是简单处理了一些,呵呵,希望采纳!!!

作者: 刘亮    时间: 2013-9-18 19:40
(0.0)’ 发表于 2013-9-18 19:15
不知道楼主学习到哪一块知识,如果没有学异常就只有当做用户很听话,让他输入什么就输入什么吧。
如果学习 ...

没有学习到异常。。我会加快效率的 谢谢
作者: 陈国柱    时间: 2013-9-18 20:30
  1. public static void main(String[] args)throws Exception{
  2.                 System.out.println("请输入一个整数:");
  3.                 Scanner sc = new Scanner(System.in);
  4.                 String str = sc.nextLine();
  5.                 while(!(str.matches("\\d+"))){//如果输入的不是数字,重新输入,知道是数字为止
  6.                         System.out.println("您所输入的数据不是数字,请重新输入:");
  7.                         sc = new Scanner(System.in);
  8.                         str = sc.nextLine();
  9.                 }
  10.                 int num = Integer.parseInt(str);
  11.                 Long result = 1L;
  12.                 for(int x=1;x<=num;x++){
  13.                         result*=x;
  14.                 }
  15.                 System.out.println(num+"!="+result);
  16.                                
  17.         }
复制代码

作者: 比烟花寂寞_neve    时间: 2013-9-18 21:44
楼上面全是正解
作者: 第一印象    时间: 2013-9-18 22:31
本帖最后由 第一印象 于 2013-9-18 22:32 编辑

1.int num = sc.nextInt();
对于这句话可以进行try catch处理,如果输入的不是int类型的数据,你这句话肯定会报异常,你捕获这个异常并且在处理代码里提示用户就可以了;
2.用正则表达式是个不错的选择,楼上已经有人给出答案了,如果正则判断以后不是你想要的结果,可以抛出一个你自定义的异常,或者搞个提示信息啥的都行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2