【问题标题】:Interface method issue [duplicate]接口方法问题[重复]
【发布时间】:2017-06-15 21:27:01
【问题描述】:

我需要实现一个接口,作为我 Java 课程的期末作业的一部分。被覆盖的界面应该打印一条短消息,描述一名足球运动员如何庆祝在 NFL 中被选中,如下所示:

System.out.println("name dances to celebrate his draft");

但是,当我将消息放入允许用户将玩家添加到他们的花名册的方法中时,我的界面没有打印消息。这是程序中重写的接口:

//Overridden celebrate method
    @Override
    public void celebrate(int i, int place){
        int randomInteger;

        if (place == 0) //Player is offensive
        {
            randomInteger = random1Thru6();

            //players() is a method that contains all the players in the team
            //'place' refers to the players location in the array of players on the team
            switch (randomInteger) 
            {

                case 1: System.out.println(players(i).get(place) + " dances to celebrate his draft!");
                break;

                case 2: System.out.println(players(i).get(place) + " cartwheels to celebrate his draft!");
                break;

                case 3: System.out.println(players(i).get(place) + " throws a party to celebrate his draft!");
                break;

                case 4: System.out.println(players(i).get(place) + " sings to celebrate his draft!");
                break;

                case 5: System.out.println(players(i).get(place) + " gets root beer for everyone to celebrate his draft!");
                break;

                case 6: System.out.println(players(i).get(place) + " gets donuts to celebrate his draft!");
            }
        }

        else if (place == 1) //Player is defensive
        {
            randomInteger = random1Thru6();

            switch (randomInteger) 
            {

                case 1: System.out.println(players(i).get(place) + " dances to celebrate his draft!");
                break;

                case 2: System.out.println(players(i).get(place) + " cartwheels to celebrate his draft!");
                break;

                case 3: System.out.println(players(i).get(place) + " throws a party to celebrate his draft!");
                break;

                case 4: System.out.println(players(i).get(place) + " sings to celebrate his draft!");
                break;

                case 5: System.out.println(players(i).get(place) + " gets root beer for everyone to celebrate his draft!");
                break;

                case 6: System.out.println(players(i).get(place) + " gets pizza to celebrate his draft!");
            }
        }



    } 

我应该对进攻和防守位置有一种不同的庆祝反应,如上面的代码所示。 下面是引用的 random1Thru6() 方法:

public int random1Thru6() { //used to get a random number from 1 to 6
        int randomInteger = (int)Math.random() * 10;
        //this is supposed to call the method over and over again until it gives a number from 1-6 but it has been printing 7-9 as well
        if (randomInteger > 6)
            random1Thru6();

        return randomInteger;
    }

这里是 player() 方法:

//holds and prints all the players
    public ArrayList<String> players(int i) {

        ArrayList<String> returnedList = new ArrayList<>();

        // Christian McCaffrey is a Running Back, Corn Elder is a Corner Back for the Carolina Panthers
        ArrayList<String> Players1 = new ArrayList<String>();
        Players1.add("Christian McCaffrey");
        Players1.add("Corn Elder");

        //Jake Butt is a Tight End, Brendan Langley is a Corner Back for the Denver Broncos
        ArrayList<String> Players2 = new ArrayList<String>();
        Players2.add("Jake Butt");
        Players2.add("Brendan Langley");

        //Ryan Switzer is a Wide Receiver, Taco Charlton is a Defensive End for the Dallas Cowboys
        ArrayList<String> Players3 = new ArrayList<String>();
        Players3.add("Ryan Switzer");
        Players3.add("Taco Charlton");

        //Dalvin Cook is a Running Back, Ifeadi Odenigbo is a Defensive Line for the Minnesota Vikings
        ArrayList<String> Players4 = new ArrayList<String>();
        Players4.add("Dalvin Cook");
        Players4.add("Ifeadi Odenigbo");

        switch (i)
        {
        case 1: returnedList.addAll(Players1);
                break;

        case 2: returnedList.addAll(Players2);
                break;

        case 3: returnedList.addAll(Players3);
                break;

        case 4: returnedList.addAll(Players4);
                break;      
        }

        return returnedList;

    }

以下是celebrate() 方法的调用方式:

for (int l = 0; l < players(i).size(); l++)
        {
            if (choosePlayer.equalsIgnoreCase(players(i).get(l)))
            {
                addPlayer(players(i).get(l));
                celebrate(i, l);
                enterRoster();
            }
        }

还有:

addPlayer(players(i).get(place));
celebrate(i, place);
enterRoster();

addPlayer(int i, int place) 是一种将队伍“i”的队员在队伍队员数组中“place”位置的队员添加到用户名册的ArrayList中的方法。

注意:我按照评论中的建议检查了 random1Thru6() 调用了什么号码,现在我明白为什么它没有打印庆祝消息,因为我有 (int)Math.random() * 10 它总是返回 0 所以我改变了它到:

double randomDouble = Math.random() * 10;
int randomInteger = (int)randomDouble;

现在它会打印庆祝消息,但 random1Thru6() 现在返回所有数字 1-9,请解释我如何使此方法递归调用自身,直到它返回数字 1-6。

谢谢你的评论!

注意:我已经接受了如下所示的delephin的回答,谢谢大家的帮助!

【问题讨论】:

  • 除了在默认方法的情况下,接口不任何事情。听起来您正在编写一个可能实现接口的类。你能澄清一下吗?
  • @CollinD 谢谢,我已经编辑了我的问题。我希望它可以简化问题。
  • 没有足够的代码来提供帮助。没有打印任何内容的潜在原因:1)您没有调用该方法。 --- 2) place 的值不是 0 或 1。 --- 3) random1Thru6() 返回值超出范围 1-6。 --- 我们可以提供的最佳帮助是:What is a debugger and how can it help me diagnose problems?
  • 向我们展示您如何调用此方法以及如何为交换机生成随机数。
  • 打印方法的输入,以及random1Thru6()返回的值

标签: java methods interface


【解决方案1】:

添加到你的主类:

static Random r = new Random();

static {
    r.setSeed(System.currentTimeMillis());
}

并将您的随机化器方法更改为以下内容:

public int random1Thru6() {
    return r.nextInt(6) + 1;
}

通过快速测试,您之前的随机发生器返回零。

【讨论】:

  • 感谢您的回答!该方法现在正在运行并正在生成正确的消息。
  • 为什么要设置种子?真的需要吗?
  • 确实没有。 Javadoc 说:“此构造函数将随机数生成器的种子设置为一个很可能与此构造函数的任何其他调用不同的值。”所以不需要那个静态块。
猜你喜欢
  • 2013-10-27
  • 1970-01-01
  • 2013-05-19
  • 2022-12-20
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多