【问题标题】:Confusing specification for creating constructors, methods and storing arrays?创建构造函数、方法和存储数组的规范令人困惑?
【发布时间】:2017-04-20 23:14:35
【问题描述】:

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

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

所以他们希望我创建一个带有两个参数的构造函数,一个用于问题,一个用于答案。然后他们要我创建一个 getAnswer 和 getQuestion 方法,其中包含每个抽认卡的答案和问题。但是,如果抽认卡包含两个字符串,那么这是否意味着一张抽认卡包含答案和问题?这意味着我无法获得答案和获得问题的方法,因为它们不能分开?

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&lt;FlashCard&gt;,所以我真的很困惑我将如何构造它,以便getQuestions() 方法返回与答案相同的抽认卡问题。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 想想真正的闪存卡。它既有问题又有答案。它们是它的属性。并将方法“getQuestion”视为“向我展示问题的一面”,将方法“getAnswer”视为“向我展示答案的一面”。该方法应仅显示该特定卡的值,而不显示其他任何卡的值。
  • "cardlist.add(new FlashCard("1Q - By what initials was Franklin Roosevelt better known?", "")); 是否适合getQuestionr(),反之亦然?
  • “我正在做作业,但我对被要求做的事情感到困惑”问你的讲师或老师。严重地。他们将很乐意帮助消除任何歧义。虽然在这种情况下,我很清楚他们在问什么,但未来我们很有可能不会比你有更多的洞察力。

标签: java arrays arraylist methods constructor


【解决方案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】:

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

    两个构造函数参数都应该存储在您的FlashCard 对象中。这就是它的属性

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

    但如果抽认卡包含两个字符串,那么这是否意味着一张抽认卡包含答案和问题?

    是的,它的目的是卡片。如果不与问题绑定,你怎么能得到答案?

    这意味着我没有 get answer 和 get question 方法,因为它们不能分开?

    嗯,答案和问题不能分开,因为它们都包含在FlashCard 对象中。但是你可以打电话给getQuestion而不用打电话给getAnswer(反之亦然)。

    你在getQuestionmethod 中输入的代码不应该在这个类中,cardList 的声明也是如此。列表包含 FlashCardFlashCard 不应该包含卡片列表。该代码创建多个闪存卡是正确的。您可以将其放在其他位置,例如在您的 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());
    }
    

    【讨论】:

      【解决方案3】:

      让我们尝试清除它:

      但是如果抽认卡包含两个字符串,那么这是否意味着一张抽认卡包含答案和问题? 是的。该类有两个成员。问题和答案。它们在调用构造函数的同一时刻绑定在一起。可以而且应该是最终的。喜欢private final String question;

      这意味着我没有 get answer 和 get question 方法,因为它们不能分开? 不,该类有两个方法,可以随时调用。他们随时给出相同的结果。喜欢public String getQuestion(){ return question; }

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

      【讨论】:

        猜你喜欢
        • 2013-09-22
        • 2016-02-05
        • 1970-01-01
        • 1970-01-01
        • 2021-06-13
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多