C#如何将方法内获取的int类型用户输入传递到另一个方法
C#方法参数传递解决方案
核心修改
你只需要为DeckCreation方法定义一个int类型的形参,就可以直接接收传入的playerDraw整数变量,全程不需要做任何类型转换,修改后的完整代码如下:
public void PlayerChooseDraw() { Deck deck = new Deck(); Console.WriteLine("Number of cards in the deck is: " + deck.CardCount); Console.WriteLine("-------------"); Console.WriteLine("How many cards do you want to draw? You can draw between 1 to 26"); int playerDraw = Convert.ToInt32(Console.ReadLine()); if (playerDraw > 26) { Console.Clear(); Console.WriteLine("ERROR: Maximum cards to draw is 26 !"); PlayerChooseDraw(); } else if (playerDraw < 1) { Console.Clear(); Console.WriteLine("ERROR: Minimum cards to draw is 1 !"); PlayerChooseDraw(); } else { Console.Clear(); DeckCreation(playerDraw); } } // 方法签名处添加int类型的形参即可直接接收传入的整数 public void DeckCreation(int playerDraw) { Console.WriteLine(playerDraw); }
优化建议
你当前使用递归处理用户输入错误的逻辑,如果用户连续多次输入非法值,可能触发栈溢出问题,同时还缺少非数字输入的校验,用户输入字母等内容时会直接抛出异常,建议改用循环实现输入校验,优化后的代码示例:
public void PlayerChooseDraw() { Deck deck = new Deck(); Console.WriteLine("Number of cards in the deck is: " + deck.CardCount); Console.WriteLine("-------------"); int playerDraw; // 循环校验输入,避免递归栈溢出风险 while(true) { Console.WriteLine("How many cards do you want to draw? You can draw between 1 to 26"); // 增加非数字输入校验 if(!int.TryParse(Console.ReadLine(), out playerDraw)) { Console.Clear(); Console.WriteLine("ERROR: Please enter a valid number!"); continue; } if(playerDraw > 26) { Console.Clear(); Console.WriteLine("ERROR: Maximum cards to draw is 26 !"); } else if(playerDraw < 1) { Console.Clear(); Console.WriteLine("ERROR: Minimum cards to draw is 1 !"); } else { break; } } Console.Clear(); DeckCreation(playerDraw); }
内容的提问来源于stack exchange,提问作者Justin Howard
相关产品推荐
相关产品推荐

