Я начал изучать Java недавно, и в настоящее время я работаю с исключениями.
Программа игры - Номер Guessing.
Код ниже представляет класс Билет.
Билет имеет серийный номер, состоящий из 8 номеров.
Первые 7 номеров - это те, которые выбраны игроком, а последний номер - количество напечатанного билета (это статическая переменная).
Входы должны быть проверены, чтобы игрок мог выбирать номера, а номера должны быть между 1 и 90. Кроме того, все номера должны быть разными (мы не рассматриваем количество распечатанных билетов).Сканер принимает только четвертый ввод
Какой именно вопрос является сканером.
Когда я запускаю программу, сканер запрашивает игрока за номер два раза до его принятия, даже если игрок сначала набирает номер.
Вот код:
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();
}
}
'if ((sc.nextInt() <1) || (sc.nextInt()> 90)) {' как вы думаете, 'nextInt()' здесь? – Pshemo
Не только там, также в 'contains (ticketNum, sc.nextInt())' – Tom
Также будьте осторожны в своих блоках 'catch': [Пропуск nextLine() после использования next(), nextInt() или другого nextFoo() методы] (https://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methods) – Pshemo