I am very confused at the behavior of using the || operator on the .equals function. Is there a reason I can not use it on strings or something?
this works:
|| means OR.
||
A || B is true if A is true or B is true.
In your second while loop: !"Y".equals(input) is false because Y is equal to your input. However !"N".equals(input) is true because N is not equal to your input. Hense the whole condition is true, it goes into while loop again.
!"Y".equals(input)
!"N".equals(input)