【问题标题】:NumberFormatException not wrking javaNumberFormatException 不工作的java
【发布时间】:2020-01-25 07:00:48
【问题描述】:

我是新手,我不知道如何打破循环。
``````````Java```````````

        public static void main(String[] args) {

        Scanner input= new Scanner (System.in) ;
        System.out.println("Enter number list:");

        try {
        String data = input.nextLine();
        ArrayList<Integer> myArray = new ArrayList<Integer>();
        int num;

        while (true){

            num = Integer.parseInt(data);

             myArray.add(num);}
    }

            catch  (NumberFormatException e)    { 
                e.printStackTrace();}

【问题讨论】:

  • 循环何时必须停止?
  • 那是不可能的。如果NumberFormatException 触发,它将被捕获。您的问题是 while (true) 循环,如果第一个输入有效,它将永远不会停止。
  • NumberFormatException 可能已被捕获,但您在 catch 块中什么都不做,从而隐藏了这一点。把System.err.println("NumberFormatException");e.printStackTrace(); 放在那里,至少...
  • 旁注:不要使用空的 catch 块。至少记录异常。 e.printStacktrace(); 在大多数情况下,while(true) 不是您想要的。添加退出条件。
  • 当您发布代码时,您应该正确地使用代码以获得更好的可读性。

标签: java exception arraylist input try-catch


【解决方案1】:

您应该在循环中读取新的输入:

try {
    ...
    while (true) { 

        num = Integer.parseInt(data);

        myArray.add(num);
    }
}
catch  (NumberFormatException e)  {

};

目前您正在无限次向您的List 添加相同的输入。

附:也许您不应该使用无限的while循环。您打算如何完成对输入的阅读?通过在用户输入无效号码时捕获NumberFormatException?将异常用作逻辑的一部分并不是一个好习惯。

【讨论】:

  • 尝试 { ArrayList myArray = new ArrayList();扫描仪输入=新扫描仪(System.in); System.out.println("输入号码列表:");字符串数据 = input.nextLine();整数; num = Integer.parseInt(data); myArray.add(num); while (true){ num = Integer.parseInt(data); }} catch (NumberFormatException e) { e.printStackTrace(); } }
【解决方案2】:

谢谢你让它工作

while(true) {
        Scanner input= new Scanner (System.in) ;
        System.out.println("Please enter a number or anything else to stop:");
        String data = input.nextLine();
        int num;

     try{

        num = Integer.parseInt(data);
        myArray.add(num);
        int arraySize;

        arraySize = myArray.size();
        Collections.sort(myArray);


    }   catch  (NumberFormatException e)    { 
        break;       

        }
     }
}

【讨论】:

    猜你喜欢
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多