异常处理java用户输入

时间:2017-05-03 12:55:00

标签: java exception user-input

我正试图在我的代码中添加异常。但它并没有完全发挥作用。我试图让用户输入整数,然后将其添加到列表中。

为什么它只适用于第一次输入?如果第一个我输入1.0,那么它将引发错误。但如果我说10, 1.0,它就不会产生错误。当我打印清单时。只有10这个实际上是正确的。但我想这样做,如果输入除整数之外的任何东西它会引发错误,并且不会终止。而是要求用户再试一次。

这就是我的代码看起来像

package basic.functions;
import java.util.*;
import java.text.DecimalFormat;

public class Percent {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        reader.useDelimiter(System.getProperty("line.separator"));
        List<Integer> list = new ArrayList<>();
        System.out.println("Enter Integer: ");

        do {
            try {
                int n = reader.nextInt();
                list.add(Integer.valueOf(n));
            } catch (InputMismatchException exception) {
                System.out.println("Not an integer, please try again");
            }
        }

        //When user press enter empty
        while (reader.hasNextInt());
        reader.close();

2 个答案:

答案 0 :(得分:2)

每当您输入$( "#tabs" ).tabs({ active: oldIndex, activate: function(event, ui) { // ui.newTab.index() gets the index of which tab is active //watch the index start from 0 if(ui.newTab.index()==1){ $.getScript("//tab2.js"); } else if(ui.newTab.index()==1){ $.getScript("//tab3.js"); } var newIndex = ui.newTab.parent().children().index(ui.newTab); try { dataStore.setItem( index, newIndex ); } catch(e) {} } }); 时,String都会返回reader.hasNextInt(),并且循环终止。因此,不打印任何内容

但是,由于它是false循环,必须执行一次,因此,如果您首先输入do-while则打印出< / strong> String

  

再次,只有在每次输入后按 Enter

时才会发生

答案 1 :(得分:1)

你正在运行的是一个do-while,它会在检查条件之前执行一次。

因此,您尝试将第一个输入解析为已处理异常的整数,从而打印错误消息。

如果你在第一次以外的任何地方给出一个非整数,你的代码只会在尝试解析输入之前终止循环。

以下内容会像您期望的那样正确地提供错误消息。

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    reader.useDelimiter(System.getProperty("line.separator"));
    List<Integer> list = new ArrayList<>();
    System.out.println("Enter Integer: ");

    while (true) {
        try {
            int n = reader.nextInt();
            list.add(Integer.valueOf(n));
        } catch (InputMismatchException exception) {
            System.out.println("Not an integer, please try again. Press enter key to exit");
            if (reader.next().isEmpty()) {
                break;
            }
        }
    }

    System.out.println(list);
    reader.close();
}