System.exit(0)无法正常工作

时间:2017-09-04 08:39:04

标签: java

try
    {    BufferedReader br=new BufferedReader(new 
                                           InputStreamReader(System.in));
         int t=Integer.parseInt(br.readLine());
         if (t <0 && t>11) System.exit(0);
         for (int i = 0; i<t;i++){
             int count=Integer.parseInt(br.readLine()); 
             if (count <1 && count>101) System.exit(0);
            .
            .
    }catch(Exception e){}
  }

如果计数&gt; = 102,程序没有终止,任何人都可以建议我做什么以及为什么? t> = 11

3 个答案:

答案 0 :(得分:5)

if (t <0 && t>11) System.exit(0);

在同一时间点,数字不能小于0且大于11。或者确切地说:Java支持的数字类型不允许这样做。

从这个意义上说,你可能意味着:

if (numberFromUser < 0 || numberFromUser > 11) {
 System.out.println("number " + numberFromUser + " is invalid, exiting");
 System.exit(1);
}

请注意我所做的更改:

  • t是一个绝对毫无意义的名字 - 使用意为的名字
  • 始终总是使用{braces} - 即使是这样简单的一行statemeents
  • 刚退出是一个糟糕的想法:你想给用户反馈出错的地方。或者你喜欢它,当你的计算机只是停止做某事而没有告诉你为什么?
  • 然后:你有一个捕获块 - 另一个超级坏主意。 禁止错误消息没有任何意义。您是否有兴趣了解程序何时出错?!
  • 传递给System.exit()的值是应用程序的“返回代码”。按惯例,返回表示:一切正常,通过。因此,在错误情况下,您应该返回零以外的其他内容。

最后:在整个地方使用System.exit()本身就是糟糕的做法。您真的不希望您的应用程序具有超过一个 exit()点。换句话说:您应该将整个应用程序设计为使用例外。当存在真正的“硬”问题时 - 给用户一个好消息,并抛出一个异常(可能是你的顶层捕获并变成一个有意义的,定义的非零返回代码)。

答案 1 :(得分:0)

count不能同时小于0且大于11。

答案 2 :(得分:0)

这种情况永远不会得到满足:

if (count <1 && count>101) System.exit(0);

count不能小于1且大于101