¿Puedo tener un iterador sin hasNext()? – Pregunta de un proyecto escolar
Tengo la tarea de programar un iterador que devuelva la siguiente letra en el abecedario:
si mi cadena es ‘a’ -> ‘b’
si es ‘ad’ -> ‘ae’
si es ‘Z’ -> ‘aa’
si es ‘az’ -> ‘aA’
si es ‘aZ’ -> ‘ba’
si es ‘ZZ’ -> ‘aaa’
y así…
Simplemente no puedo entender qué debería haber en mi función ‘hasNext()’. El profesor nos dijo que no nos evaluarán con letras en grandes cantidades, por lo que ‘<valor máximo’ no es necesario.
lo único que se me ocurre es no usar esto en absoluto, pero no sé si debería o cómo escribir que no lo estoy usando. máximo’=”” no=”” es=”” necesario.=”” lo=”” único=”” que=”” se=”” me=”” ocurre=”” es=”” no=”” usar=”” esto=”” en=”” absoluto,=”” pero=”” no=”” sé=”” si=”” debería=”” o=”” cómo=”” escribir=”” que=”” no=”” lo=”” estoy=””></valor máximo’ no es necesario.
lo único que se me ocurre es no usar esto en absoluto, pero no sé si debería o cómo escribir que no lo estoy usando.>
davy.ai
Para crear un iterador que devuelva la siguiente letra del alfabeto, puedes implementar la interfaz
Iterator
y sobrescribir los métodoshasNext()
ynext()
. Aquí hay una posible implementación:La clase
AlphabetIterator
recibe una cadena de inicio como parámetro e inicializa el campocurrent
con ella. El métodohasNext()
siempre devuelvetrue
porque podemos generar nuevas letras infinitamente. El métodonext()
genera la siguiente secuencia de letras copiando primero la secuencia actual como resultado, luego modificándola para crear la siguiente.El algoritmo de modificación funciona de la siguiente manera:
Z
pora
y llevar a cabo la suma al siguiente carácter a la izquierdaZ
, sumarle uno y devolver la secuencia modificadaa
al principio y devolver la secuencia modificadaPor ejemplo, si la secuencia actual es
"ad"
, el métodonext()
la modificará de la siguiente manera:"ad"
en la variable resultado"ad"
en['a', 'd']
d
pora
y llevar a cabo la suma aa
:['a', 'e']
"ad"
y actualizarcurrent
a"ae"
De manera similar, si la secuencia actual es
"Z"
, el métodonext()
la modificará de la siguiente manera:"Z"
en la variable resultado"Z"
en['Z']
Z
pora
y llevar a cabo la suma aa
(que aún no existe):['a', 'a']
"Z"
y actualizarcurrent
a"aa"