while (!answer.equals("yes") && !answer.equals("no"))
означает, что цикл завершается, когда условие становится ложным. Согласно законам де Моргана, !(!answer.equals("yes") && !answer.equals("no"))
равно answer.equals("yes") || answer.equals("no")
. То есть цикл завершается, когда ответом является или"да" или "нет" - это именно то, что вы хотите.
Если вы измените &&
на ||
, цикл прекратится, когда ответом будет и"да" и "нет" одновременно, что невозможно.