2017-04-10 20 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 





     }