我最近开始学习Java,目前我正在处理例外情况 程序是一个游戏 - 数字猜测 下面的代码表示类票证 机票有序列号,由8个号码组成 前七个数字是玩家选择的数字,最后一个数字是打印的票数(它是静态变量) 应该检查输入,以便玩家只能选择数字,数字必须在1到90之间。此外,所有数字必须不同(我们不考虑打印的票数)。
真正的问题是Scanner 当我运行程序时,扫描仪在接受之前要求玩家进行两次,即使玩家先输入好的号码。
以下是代码:
public class Ticket {
private static int serialNum = 0;
private int ticketNum[];
Ticket() {
Scanner sc = new Scanner(System.in);
ticketNum = new int[8];
this.serialNum += 1;
this.ticketNum[7] = serialNum;
System.out.println("Ticket numbers input...");
for (int i = 0; i < 7; i++) {
System.out.println("Choose " + (i + 1) + ". number: ");
try {
if (!sc.hasNextInt()) {
throw new ValueException();
} else {
if (contains(ticketNum, sc.nextInt())) {
throw new DuplicateValueException();
}
if ((sc.nextInt() < 1) || (sc.nextInt() > 90)) {
throw new ValueException();
}
}
} catch (ValueException e) {
System.out.println(e.Message());
i -= 1;
sc.nextLine();
continue;
} catch (DuplicateValueException e) {
System.out.println(e.Message());
i -= 1;
sc.nextLine();
continue;
}
this.ticketNum[i] = sc.nextInt();
}
}
public void printTicketNum() {
System.out.println("Ticket serial number: ");
for (int i = 0; i < this.ticketNum.length; i++) {
System.out.print(ticketNum[i]);
}
}
private boolean contains(int arr[], int val) {
int flag = 0;
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] == val)
flag++;
}
if (flag > 0)
return true;
else
return false;
}
public static void main(String[] args) {
Ticket t1 = new Ticket();
t1.printTicketNum();
}
}
答案 0 :(得分:4)
每次调用if(contains(ticketNum,sc.nextInt())){
throw new DuplicateValueException();
}
if((sc.nextInt()<1)||(sc.nextInt()>90)){
throw new ValueException();
}
时,都会从输入中获取一个新的整数。例如,在您拥有的块中
int input = sc.nextInt();
你实际上可以用三个独立的整数阅读。
你不想这样做。相反,您可以将获取的整数分配给局部变量
-x
并且每次需要时只检查该变量的值。