ユーザーが showConfirmDialog ウィンドウで「いいえ」をクリックすると終了する while ループ (do...while ではない) を作成しようとしています。ただし、プログラムを実行すると、[いいえ] をクリックしたり、終了しようとしても、ループを繰り返し続けます。これは、[いいえ] をクリックすると NO_ANSWER に変わるはずなのに、yesNO 変数を JOptionPane.NO_ANSWER に等しくすることができないためだと思われます。
変数 rand と number に格納されている SecureRandom コードが、answers 配列に乱数を生成していません。Math.random() を試してみましたが、うまくいきませんでしたが、SecureRandom を使用してランダムな配列インデックスを生成したいと考えています。
私のwhileループの最後の行は、userInput値を空の文字列に置き換えていません.最初に入力された質問でループを繰り返すだけです。その無限ループにとどまりたかったとしても、入力した新しい質問さえ記録されません...
ユーザーが [いいえ] をクリックしたときにループが終了し、SecureRandom コードが毎回異なる回答インデックスを生成し (現在、インデックス 19 の非常に疑わしいインデックスのみが表示されます)、userInput 変数が空白の文字列に変更されるようにするにはどうすればよいですか? または、少なくとも現在の文字列を次の反復からの入力に置き換えます
import javax.swing.*;
import java.math.*;
public class MagicEightBall {
public static void main(String[] args) {
Random rand = new SecureRandom();
int number = rand.nextInt(20);
//array for answers
String [] answers = {"It is certain", "It is decidedly so", "Without a doubt",
"Yes - definitely", "You may rely on it", "As I see it, yes",
"Most likely", "Outlook good", "Signs point to yes",
"Yes", "Reply hazy, try again", "Ask again later",
"Better not tell you now", "Cannot predict now", "Concentrate and ask again",
"Don't count on it", "My reply is no", "My sources say no",
"Outlook not so good", "Very doubtful"};
ImageIcon image = new ImageIcon("8ball_small.jpg");
// prompt user for question
String userInput = JOptionPane.showInputDialog(null, "What is your question?", "Welcome to MAGIC 8-BALL", JOptionPane.QUESTION_MESSAGE);
//return answer (Always returns "Very Doubtful)
showMessageDialog(userInput + "\n\n\n\n" + answers[number],"MAGIC 8-BALL SAYS: ",0,image);
int yesNo = showConfirmDialog("","ASK MAGIC 8-BALL AGAIN", JOptionPane.YES_NO_OPTION, 0, image);
// ask user to stop or continue asking questions (begins loop no
//matter what input)
while (yesNo == JOptionPane.YES_OPTION) {
userInput = JOptionPane.showInputDialog(null, "What is your question?", "Welcome to MAGIC 8-BALL", JOptionPane.QUESTION_MESSAGE);
showMessageDialog(userInput + "\n\n\n\n" + answers[number],"MAGIC 8-BALL SAYS: ",0,image);
yesNo = showConfirmDialog("","ASK MAGIC 8-BALL AGAIN", JOptionPane.YES_NO_OPTION, 0, image);
userInput = ""; // doesn't reset userInput to an empty string for
// next iteration
}
showMessageDialog("/n/n/n/n Programmed By Jason Silva","GOODBYE ",0,image);
}
//teacher wants us to write methods for the dialog boxes
public static void showMessageDialog(String message, String title, int messageType, ImageIcon image) {
JOptionPane.showMessageDialog (null, message, title, messageType, image);
}
public static int showConfirmDialog(String message, String title,
int optionType, int messageType, ImageIcon icon) {
JOptionPane.showConfirmDialog(null, message, title, optionType, messageType, icon);
return optionType;
}
}