В настоящее время для моего университетского проекта мы должны смоделировать систему лотереи, или «миллионы евро», для этого нам даны два класса по умолчанию: класс ключа и класс итератора. Мы не можем изменить их каким-либо образом.
Я хотел сравнить значения из ключевого итератора с массивом отсканированных целых чисел, возвращая количество найденных совпадений. Проблема в том, что всякий раз, когда я вставляю эти числа, итератор выходит за пределы, и поэтому я не могу сравнивать оба.
Вот что я пытался сделать с цифрами (5 цифр и 2 звезды - как евромиллионы):
public int compareNums() {
int n = 0;
int numberOfMatches = 0;
It2Storage.reinitialize();
while (n < 5) {
if (It2Storage.hasNextInt() && It2Storage.nextInt() == numArray[n]) {
numberOfMatches++;
n++;
It2Storage.reinitialize();
}else if (((It2Storage.hasNextInt()) && (It2Storage.nextInt() != numArray[n]))){
System.out.print(It2Storage.nextInt());
}
n++;
It2Storage.reinitialize();
}
return numberOfMatches;
}
It2Storage
- это копия Итератора, содержащая значения массива чисел класса ключей.
NumArray
- это массив, содержащий все входные номера сканера.
Если указано, что итератор должен переходить к следующему целому числу, только если у него есть следующее целое число. Однако я не вижу, чтобы это произошло.
Здесь по умолчанию Iterator
Class и Key
class.
Итератор:
public class IteratorInt {
private int countNumbers,currNumber;
private int [] numbers;
public IteratorInt(int[] numbers) {
countNumbers=numbers.length;
currNumber=0;
this.numbers=numbers;
}
/
public IteratorInt(int[] numbers, int nElems) {
countNumbers=nElems;
currNumber=0;
this.numbers=numbers;
}
public boolean hasNextInt() {
return currNumber < countNumbers;
}
public int nextInt() {
return numbers[currNumber++];
}
public void reinitialize() {
currNumber=0;
}
}
А вот и ключ
public class Key {
private static final int NUMBERGAMES =10;
private static final int [][]NUMBERS = {{4,5,28,50,11},{4,8,18,44,13},{1,2,28,48,49},{2,15,22,33,11},{10,20,30,50,40},{4,15,21,32,11},{2,5,18,20,11},{6,7,28,50,14},{1,5,33,50,11},{4,6,28,45,10}};
private static final int [][]STARS = {{4,5},{4,6},{4,10},{9,10},{1,5},{6,7},{1,11},{5,8},{9,10},{1,12}};
private static int CURRENTGAME=0;
private int idGame;
public Key() {
idGame=CURRENTGAME;
CURRENTGAME= ++CURRENTGAME % NUMBERGAMES;
}
public IteratorInt criaIteratorNumbers() { //creates numbers iterator
return new IteratorInt(NUMBERS[idGame]);
}
public IteratorInt criaIteratorStars() { //creates stars iterator
return new IteratorInt(STARS[idGame]);
}
}
Я создал ключ в своем игровом классе и создал итераторы для звезд и чисел, которые я сохранил в виде переменных итераторов It1Storage
и It2Storage
.
Чтобы сравнить введенные числа с числами ключа, я должен продолжать использовать свой метод, но изменить его, или выбрать другой подход?