2017-06-15 81 views
-2

我需要实现一个接口作为我的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; 
    } 

这里是玩家()方法:

//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; 

    } 

这里是如何庆祝()方法被调用:

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)是一种方法,将球队'我'的球员加入球队球员阵列中'地点'的位置,加入到用户名单的阵列列表中。

注意:我查看了random1Thru6()中正在调用的注释中的数字,现在我明白了它为什么不打印庆祝消息,因为我有(int)Math.random() * 10它总是返回0,所以我将其更改为:

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

现在它打印庆祝的消息,但random1Thru6()现在返回所有数字1-9,请解释我怎么能做出这种方法调用自身递归,直到它会返回一个数字1-6。

谢谢delephin您的评论!

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

+1

除了默认方法的情况下,接口不做任何事情。这听起来像你正在编写一个可能实现接口的类。你能澄清吗? – CollinD

+0

@CollinD谢谢你,我编辑了我的问题。我希望它能简化问题。 –

+6

代码不足以提供帮助。可能的原因是什么都没有印出:1)你不叫这个方法。 --- 2)'place'的值不是0或1. --- 3)'random1Thru6()'返回范围1-6以外的值。 ---我们可以给出的最佳帮助是:[什么是调试器,它如何帮助我诊断问题?](https://stackoverflow.com/q/25385173/5221149) – Andreas

回答

0

添加到您的主类:

static Random r = new Random(); 

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

,改变你的随机方法是这样的:

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

从快速测试,你以前的随机返航零。

+0

谢谢你的回答!该方法正在工作,正在生成正确的消息。 –

+1

为什么要设置种子?真的需要吗? –

+0

确实没有。 Javadoc说:“这个构造函数将随机数生成器的种子设置为一个非常有可能不同于此构造函数的任何其他调用的值。”所以不需要那个静态块。 –