2017-04-10 50 views
0

我有下面的代码,我想创造一些守门员的对象,那么一些后卫的对象,然后中场等等。 我的目的是让我整数增量创建的每个对象后使用if语句来检查我是什么样的价值,并相应地分配球员类型。递增而无需环路

目前,我得到我的所有对象早在守门员的对象,这意味着我不递增。任何想法如何我可以解决这个问题?

//create different types of player 
int i = 0; 


if (i < 2) 
{ 
    i+=1; 
    //create gk 
    p = new Goalkeeper(fname, lname, saves, tackles, assists, goals, minutesplayed, fitness); 
} 
else if (i >= 2 && i < 9) 
{ 
    i++; 
    //create d 
    p = new Defender(fname, lname, headerswon, tackles, assists, goals, minutesplayed, fitness); 
} 
else if (i >= 9 && i < 16) 
{ 
    i++; 
    //crete mf 
    p = new Midfielder(fname, lname, passsuccessrate, tackles, assists, goals, minutesplayed, fitness); 
} 
else 
{ 
    i++; 
    //create striker 
    p = new Striker(fname, lname, shotsontarget, tackles, assists, goals, minutesplayed, fitness); 
} 

return p; //return the randomly generated player 
+1

此代码将只创建一个对象(取决于i的值,它总是为0),然后返回该对象。听起来像你需要一个静态变量我。 – Dave

+0

你是否有任何围绕这些循环的外部循环。如果是的话,确保你没有初始化i = 0每次在 –

+0

这看起来不像完整的代码。您在顶部将'i'设置为'0',因此在返回之前只有第一个'if'会被输入。 – Equalsk

回答

0

制作我静态

//创建不同类型的播放机的

静态INT I = 0;

  if (i < 2) 
      { 
      i+=1; 
      //create gk 
      p = new Goalkeeper(fname, lname, saves, tackles, assists, goals, minutesplayed, fitness); 

     } 
      else if (i >= 2 && i < 9) 
      { 
      i++; 
      //create d 
      p = new Defender(fname, lname, headerswon, tackles, assists, goals, minutesplayed, fitness); 

      } 
      else if (i >= 9 && i < 16) 
      { 
      i++; 
      //crete mf 
      p = new Midfielder(fname, lname, passsuccessrate, tackles, assists, goals, minutesplayed, fitness); 

     } 
      else 
      { 
      i++; 
      //create striker 
      p = new Striker(fname, lname, shotsontarget, tackles, assists, goals, minutesplayed, fitness); 

     } 



      return p; //return the randomly generated player 
+0

@DonatPants变量i不会对方法的每个呼叫被重新初始化,因为它是静态的现在 –

+0

对不起,我忘了加,回报是在那里我遇到的问题 –

5

你需要一个循环,否则整个if分支结构只检查一次。

你为什么循环规避?循环,这很简单:

List<Player> players = new List<Player>(); 

for (int i = 0; i < numPlayers; ++i) 
{ 
    Player p; 

    if (i < 2) 
     p = new GoalKeeper(...); 
    else if (i < 9) 
     p = new Defender(...); 
    else if (i < 16) 
     p = new Midfielder(...); 
    else 
     p = new Striker(...); 

    players.Add(p); 
} 
+0

我不反对循环。谢谢! –

+3

@GerMc ...但你的问题具体说,“...没有for循环” –

0

解决:我从调用方法传递一个int。谢谢大家!

private Player GetRandomPlayer(int count) 
      { 

        Player p; //create new player 

       //calculate various stats using random 
       int tackles = rand.Next(0, 20); 
       int assists = rand.Next(0, 3); 
       int goals = rand.Next(0, 3); 
       int minutesplayed = rand.Next(0, 90); 
       int saves = rand.Next(0,30); 
       int headerswon = rand.Next(0, 20); 
       int passsuccessrate = rand.Next(0, 100); 
       int shotsontarget = rand.Next(0, 25); 
       string fitness = "Fit"; 

       //create random player names from the names data declared earlier 
       string fname = firstnames[rand.Next(0, firstnames.Length)]; 
       string lname = lastnames[rand.Next(0, lastnames.Length)]; 

       //2gk, 7d,7m,4 striker 

       //create different types of player 





        if (count < 2) 
        { 

         //create gk 
         p = new Goalkeeper(fname, lname, saves, tackles, assists, goals, minutesplayed, fitness); 

        } 
        else if (count < 9) 
        { 

         //create d 
         p = new Defender(fname, lname, headerswon, tackles, assists, goals, minutesplayed, fitness); 

        } 
        else if (count < 16) 
        { 

         //crete mf 
         p = new Midfielder(fname, lname, passsuccessrate, tackles, assists, goals, minutesplayed, fitness); 

        } 
        else 
        { 

         //create striker 
         p = new Striker(fname, lname, shotsontarget, tackles, assists, goals, minutesplayed, fitness); 

        } 



        return p; //return the randomly generated player 





     }