このサイトをチェックしたところ、他の人には同様の問題があったようですが、静的フィールドが原因でした。私は2クラス、質問を拡張する質問クラスとScienceQuestionsクラスている:私はScienceQuestionsクラスをインスタンス化するとき今のArrayList sciQuestions内のすべての要素が同じでJava ArrayList.add()はarrayのすべての要素を最終要素に置き換えます
import java.util.*;
public abstract class Questions {
public int questionID;
public int difficulty;
public boolean bAsked;
public String question;
public ArrayList<String> answers;
public String correctAnswer;
public Questions addQuestion(int id, int dif, boolean asked, String q, ArrayList<String> ans, String correct)
{
questionID = id;
difficulty = dif;
bAsked = asked;
question = q;
answers = ans;
correctAnswer = correct;
return this;
}
}
import java.util.ArrayList;
public class ScienceQuestions extends Questions
{
public ArrayList<Questions> sciQuestions = new ArrayList<Questions>();
//Add default questions
public ScienceQuestions()
{
sciQuestions.add(0, addQuestion1());
sciQuestions.add(1, addQuestion2());
sciQuestions.add(2, addQuestion3());
System.out.println(sciQuestions.get(0).question + " " + sciQuestions.get(1).question + " " + sciQuestions.get(2).question);
}
//question 1
private Questions addQuestion1()
{
int questionID = 1;
int dif = 1;
boolean asked = false;
String question = "What is the chemical symbol for Magneisum?";
ArrayList<String> answers = new ArrayList<>();
String answer1 = "Mg", answer2 = "M", answer3 = "mg", answer4 = "MG";
String correctAnswer = answer1;
answers.add(answer1);
answers.add(answer2);
answers.add(answer3);
answers.add(answer4);
Questions thisQ = addQuestion(questionID, dif, asked, question, answers, correctAnswer);
return thisQ;
}
//question 2
private Questions addQuestion2()
{
int questionID = 1;
int dif = 2;
boolean asked = false;
String question = "What is the most accurate acceleration on Earth due to gravity as sea level?";
ArrayList<String> answers = new ArrayList<>();
String answer1 = "9.81 m/s", answer2 = "9.81 N/Kg", answer3 = "10 m/s^2", answer4 = "10 N/Kg";
String correctAnswer = answer2;
answers.add(answer1);
answers.add(answer2);
answers.add(answer3);
answers.add(answer4);
Questions thisQ = addQuestion(questionID, dif, asked, question, answers, correctAnswer);
return thisQ;
}
//question 2
private Questions addQuestion3()
{
int questionID = 1;
int dif = 2;
boolean asked = false;
String question = "What is the order of magnitude of the gravitational constant in standard units?";
ArrayList<String> answers = new ArrayList<>();
String answer1 = "*10^-10", answer2 = "*10^-13", answer3 = "*10^-12", answer4 = "*10^-11";
String correctAnswer = answer4;
answers.add(answer1);
answers.add(answer2);
answers.add(answer3);
answers.add(answer4);
Questions thisQ = addQuestion(questionID, dif, asked, question, answers, correctAnswer);
return thisQ;
}
}
をしています私は最後の要素として追加しました。何故ですか?
ありがとう、それは動作します。だから、私は新しい質問()をインスタンス化していなかったので、それがうまくいかなかったのは初めてだと推測しているので、addQuestion()はそのクラスの "インスタンス" – user3544582
正確:あなたは1つのインスタンス/オブジェクトを作成し、このオブジェクトをarraylistに追加しました。しかし、それは参考になるので、新しいオブジェクトは作成されません。 addQuestionメソッド中にオブジェクトのプロパティを変更し、arraylistでget(index)を呼び出すと、各インデックスに対して同じオブジェクトが得られます。したがって、最後に設定したパラメータと同じです。 –