2回出力される理由は、最初の行がループの外で質問を出力し、次に答えをテストし(キャプチャされず、参照変数が初期化されたものに依存する)、最初に取得するwhileループに入るからです。ユーザーからの最後の質問への入力は、質問を再度出力します。
System.out.print("Would you like to continue (Y/N)?"); //prints to screen
//no input captured before test
while (!Anwser.equals("Y")){ //tests the reference variable
Anwser = UserInput.next(); //captures user input after test
System.out.println("Would you like to continue (Y/N)?"); //asks question again
}
while ループはテスト前のループです。つまり、内部でコードを実行する前に条件をテストします。このコードでは、最初の質問に対する応答をテストして、2 番目の質問に回答します。そのため、while ループを維持したい場合に本当に必要なことは、質問をループ内に 1 回入れるだけです。
while (!Anwser.equalsIgnoreCase("Y"))
{
System.out.println("Would you like to continue (Y/N)?");
Anwser = UserInput.next();
}
また、文字をキャプチャしているだけなので、文字リテラルを保持する String オブジェクトを作成する代わりに、char 変数を試してください。その解決策は次のとおりです。
char answer = ' ';
Scanner userInput = new Scanner(System.in);
while (answer != 'N') // check for N to end
{
System.out.println("Would you like to continue (Y/N)?");
answer = Character.toUpperCase(userInput.nextLine().charAt(0));
}