1

多肢選択問題のリストを表示するプログラムを作成しています。Java クラスの ChoiceString データ メンバーに格納されている値に問題があります。クラスの各インスタンスには ChoiceString の独自の値が必要ですが、何らかの理由で ChoiceString は最初のインスタンスによって初期化された値のみを保持し、それを他のインスタンスと共有します。ここで、各インスタンスに独自の ChoiceString の一意の値を持たせます。どうすれば修正できますか?

以下は私のコードです:

   public class AllChoiceQuestion extends ChoiceQuestion{

  private String note = "Note: The following question has one or more correct choices\nYou must give the number(s) of ALL correct anwers, in order,\nto get full credit andsperated by spaces";
  private int count =0;
      // A varabile that will hold the user answer 
  private String choiceString;


public AllChoiceQuestion(String questionText) {
    // initilize the question text value
            super(questionText);
    choiceString="";

}

   public void addChoice(String choice, boolean correct){
       super.addChoice(choice, correct);
       if(correct == true){
           count++;
           choiceString +=   "" + count+" " ;
            }
       super.setAnswer(choiceString.trim());
       }

   public void display(){
      System.out.println(note);
      super.display();
   }

   public String toString(){
       return note +"\n"+ super.toString();

   }
 }

これは私のインスタンスのコードです

      ChoiceQuestion allchoicequestion1 = new AllChoiceQuestion("Which of the basic data type(s) has the size of 16 bit?");
      allchoicequestion1.addChoice("Char", true);
      allchoicequestion1.addChoice("Short", true);
      allchoicequestion1.addChoice("Float", false);
      allchoicequestion1.addChoice("Double", false);


      ChoiceQuestion allchoicequestion2 = new AllChoiceQuestion("Which of the basic data type(s) has the size of 64 bit?");
      allchoicequestion2.addChoice("Long", false);
      allchoicequestion2.addChoice("Doulbe", false);
      allchoicequestion2.addChoice("Byte", true);
      allchoicequestion2.addChoice("Int", true);

したがって、allChoiceQuestion1 の ChoiceStrng は 1 2 であり、ChoiceString forallChoiceQuestion2 は 3 4 である必要がありますが、forallChoiceQuestion2 の回答として 3 4 を入力するたびに、間違った回答が返されますが、1 2 と入力すると正しいでしょう。

4

3 に答える 3

0

correct問題は、変数が false のときにカウントをインクリメントしていないことです。したがって、選択文字列は常に 1 2 になります。

于 2012-05-27T07:15:49.357 に答える
0

choiceString は、コンストラクターで毎回 "" に初期化されています。

試す

choiceString = questionText;
于 2012-05-27T06:51:07.567 に答える
0

拡張AllChoiceQuestionして、のような子クラスNumberChoiceQuestionStringChoicQuestion独自に実装choiceStringする必要があります。子クラスで実装をオーバーロードchoiceStringし、子クラスのオブジェクトを作成する必要があります。このようにして、子クラス固有のものを作成しますchoiceString


 public class NumberChoiceQuestion extends AllChoiceQuestion{
        this.choiceString; // Over written value of choiceString specific to NumberChoiceQuestion
    }

public class StringChoiceQuestion extends AllChoiceQuestion{
        this.choiceString; // Over written value of choiceString specific to StringChoiceQuestion
    }
于 2012-05-27T06:52:07.263 に答える