我正试图在我的代码中添加异常。但它并没有完全发挥作用。我试图让用户输入整数,然后将其添加到列表中。
为什么它只适用于第一次输入?如果第一个我输入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();
答案 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();
}