困惑的创建构造函数,方法和存储数组的规范?

时间:2016-12-06 10:37:06

标签: java arrays arraylist methods constructor

我正在做一项任务,我对我被要求做的事感到困惑。规范是:

  • 创建一个FlashCard类,在其构造函数中包含2个字符串,一个用于问题,另一个用于答案。 FlashCard应该有getQuestion和getAnswer方法。

所以他们希望我创建一个构造函数,它有两个参数,一个用于问题,一个用于答案。然后他们希望我创建一个getAnswer和getQuestion方法,其中包含eah flashcard的答案和问题。但如果闪卡包含两个字符串,那么这并不意味着一张闪存卡中有答案和问题吗?这意味着我不能得到答案并得到问题方法,因为他们不能分开?

import java.util.ArrayList;

public class FlashCard {

         ArrayList<FlashCard> cardlist = new ArrayList<FlashCard>();


    FlashCard(String question, String answer)
    {

    }


    public ArrayList<FlashCard> getQuestion() {

    cardlist.add(new FlashCard("1Q - By what initials was Franklin Roosevelt better known?", "1A - FDR"));
    cardlist.add(new FlashCard("2Q - Which number president was Franklin Roosevelt?", "2A - 32"));
    cardlist.add(new FlashCard("3Q - Which state was Franklin Roosevelt3 born in?", "3A - New York"));
    cardlist.add(new FlashCard("4Q - In which year did Roosevelt become Governor of New York?", "4A - 1929"));
    cardlist.add(new FlashCard("5Q - What was the name of Franklin Roosevelt's wife?", "5A - Elenor"));
    cardlist.add(new FlashCard("6Q - How many children did Franklin Roosevelt have?", "6A - 6"));
    cardlist.add(new FlashCard("7Q - From which university did Franklin Roosevelt graduate with an A.B in history?", "7A - Harvard"));
    cardlist.add(new FlashCard("8Q - What was the first name of Franklin Roosevelt's 5th cousin, who was also President?", "8A - Theodore"));
    cardlist.add(new FlashCard("9Q - Which disease is believed to be the causes of Franklin Roosevelt's paralysis?", "9A - Polio"));
    cardlist.add(new FlashCard("10Q - At what age did Franklin Roosevelt die?", "10A - 63"));

    }

    public ArrayList<FlashCard> getAnswer() {

    cardlist.add(new FlashCard("1Q - By what initials was Franklin Roosevelt better known?", "1A - FDR"));
    cardlist.add(new FlashCard("2Q - Which number president was Franklin Roosevelt?", "2A - 32"));
    cardlist.add(new FlashCard("3Q - Which state was Franklin Roosevelt3 born in?", "3A - New York"));
    cardlist.add(new FlashCard("4Q - In which year did Roosevelt become Governor of New York?", "4A - 1929"));
    cardlist.add(new FlashCard("5Q - What was the name of Franklin Roosevelt's wife?", "5A - Elenor"));
    cardlist.add(new FlashCard("6Q - How many children did Franklin Roosevelt have?", "6A - 6"));
    cardlist.add(new FlashCard("7Q - From which university did Franklin Roosevelt graduate with an A.B in history?", "7A - Harvard"));
    cardlist.add(new FlashCard("8Q - What was the first name of Franklin Roosevelt's 5th cousin, who was also President?", "8A - Theodore"));
    cardlist.add(new FlashCard("9Q - Which disease is believed to be the causes of Franklin Roosevelt's paralysis?", "9A - Polio"));
    cardlist.add(new FlashCard("10Q - At what age did Franklin Roosevelt die?", "10A - 63")); 

    }

}

他们还需要返回ArrayList<FlashCard>所以我真的很困惑我将如何构造它,以便getQuestions()方法返回flashcard问题的答案相同。非常感谢任何帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

这意味着FlashCard只有一个问题和一个答案。

两个构造函数参数都应存储FlashCard对象中。这是属性

getQuestiongetAnswer方法是 getters ,它们只返回相应的属性,这里是FlashCard唯一的问题/答案。

  

但是如果闪卡包含两个字符串,那么这不意味着一张闪存卡中有答案和问题吗?

是的,这是卡的目的。如果它不受问题约束,你怎么能得到答案呢?

  

这意味着我没有得到答案并得到问题方法,因为他们不能分开?

嗯,答案和问题不能分开,因为它们都包含在FlashCard对象中。但是,您可以在不致电getQuestion的情况下致电getAnswer(以及其他方式)。

您在getQuestion方法中输入的代码不应该在此类中,与cardList的声明相同。列表包含 FlashCard,但FlashCard不应包含卡片列表。该代码适用于创建多个闪存卡。您可以将其放在其他位置,例如在main方法或处理卡列表的其他类中:

public static void main(String [] args)
{
    ArrayList<FlashCard> cardlist = new ArrayList<FlashCard>();

    cardlist.add(new FlashCard("1Q - By what initials was Franklin Roosevelt better known?", "1A - FDR"));
    cardlist.add(new FlashCard("2Q - Which number president was Franklin Roosevelt?", "2A - 32"));
    cardlist.add(new FlashCard("3Q - Which state was Franklin Roosevelt3 born in?", "3A - New York"));

    System.out.println("first question: "+cardList.get(0).getQuestion()+ " - answer: "+cardList.get(0).getAnswer());
}

答案 1 :(得分:1)

这听起来很有趣,所以我已经满足了你的要求并模拟了一个迷你闪存卡游戏,也许你会更容易理解你的例子。

public class PlaygroundMain {

        public static void main(String... args) {
                Scanner sc = new Scanner(System.in);
                PlaygroundMain gameDemo = new PlaygroundMain();
                System.out.println("Shuffling the cards");
                List<FlashCard> shuffledDeck = gameDemo.getQuestions();
                Collections.shuffle(shuffledDeck);
                System.out.println("Cards Shuffled!");
                int score = 0;

                for (FlashCard card : shuffledDeck) {
                        System.out.println(card.getQuestion());
                        final String answer = sc.nextLine();

                        if (answer.trim().equals(card.getAnswer())) {
                                System.out.println("You have answered right!, giving you a point");
                                score++;
                        } else {
                                System.out.println("Sorry, you have answered wrong, the correct answer is: "+card.getAnswer());
                        }

                        if (shuffledDeck.indexOf(card) != shuffledDeck.size()-1) {
                                System.out.println("Preparing next question...");
                        }
                }

                System.out.println("Your score is: "+score);
        }


        public List<FlashCard> getQuestions() {
                FlashCard c1 = new FlashCard("Q1: What is my name?", "Alfred");
                FlashCard c2 = new FlashCard("Q2: What is my age?", "26");
                return Arrays.asList(c1, c2);
        }

        class FlashCard {
                private final String question;
                private final String answer;

                public FlashCard(String question, String answer) {
                        this.question = question;
                        this.answer = answer;
                }


                public String getQuestion() {
                        return question;
                }

                public String getAnswer() {
                        return answer;
                }

        }
}

答案 2 :(得分:0)

让我们试着清除它:

但如果闪卡包含两个字符串,那么这并不意味着一个闪存卡中有答案和问题吗? 是。该班有两名成员。问题和答案。它们在调用构造函数的同一时刻绑定在一起。可能而且应该是最终的。就像private final String question;

一样

这意味着我不能得到答案并得到问题方法,因为他们不能分开? 不。该类有两种方法,可以随时调用。他们随时都会给出相同的结果。就像public String getQuestion(){ return question; }

一样

您的代码唯一的问题是您创建了两次FlashCards列表。不要那样做。将代码移动到单个点。也许放在一个单独的类中,其中包含FlashCards“Deck”列表。因此,当您创建“Deck”时,它包含所有FlashCards的列表。